ai.libx.js 0.2.7 → 0.2.8
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/build/adapters/google.js +85 -72
- package/build/adapters/google.js.map +1 -1
- package/build/models.d.ts +9 -0
- package/build/models.js +2 -0
- package/build/models.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/google.ts +105 -62
- package/src/models.ts +2 -0
package/build/adapters/google.js
CHANGED
|
@@ -8,13 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
12
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
|
-
var m = o[Symbol.asyncIterator], i;
|
|
14
|
-
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
15
|
-
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
16
|
-
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
17
|
-
};
|
|
18
11
|
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
19
12
|
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
20
13
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
@@ -31,7 +24,6 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
|
|
|
31
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
25
|
exports.GoogleAdapter = void 0;
|
|
33
26
|
const BaseAdapter_1 = require("./base/BaseAdapter");
|
|
34
|
-
const stream_1 = require("../utils/stream");
|
|
35
27
|
const errors_1 = require("../utils/errors");
|
|
36
28
|
const content_helpers_1 = require("../utils/content-helpers");
|
|
37
29
|
const models_1 = require("../models");
|
|
@@ -339,85 +331,106 @@ class GoogleAdapter extends BaseAdapter_1.BaseAdapter {
|
|
|
339
331
|
}
|
|
340
332
|
handleStreamResponse(response, model) {
|
|
341
333
|
return __asyncGenerator(this, arguments, function* handleStreamResponse_1() {
|
|
342
|
-
var _a,
|
|
343
|
-
var _d, _e, _f;
|
|
334
|
+
var _a, _b;
|
|
344
335
|
if (!response.body) {
|
|
345
336
|
throw new Error('No response body for streaming');
|
|
346
337
|
}
|
|
347
338
|
const accumulatedToolCalls = [];
|
|
339
|
+
const reader = response.body.getReader();
|
|
340
|
+
const decoder = new TextDecoder();
|
|
348
341
|
let buffer = '';
|
|
342
|
+
let depth = 0;
|
|
343
|
+
let inString = false;
|
|
344
|
+
let escapeNext = false;
|
|
345
|
+
let objectStart = -1;
|
|
349
346
|
try {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
const
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
347
|
+
while (true) {
|
|
348
|
+
const { done, value } = yield __await(reader.read());
|
|
349
|
+
if (done) {
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
buffer += decoder.decode(value, { stream: true });
|
|
353
|
+
let i = 0;
|
|
354
|
+
while (i < buffer.length) {
|
|
355
|
+
const char = buffer[i];
|
|
356
|
+
if (escapeNext) {
|
|
357
|
+
escapeNext = false;
|
|
358
|
+
i++;
|
|
362
359
|
continue;
|
|
363
|
-
const content = this.extractContentText(candidate.content);
|
|
364
|
-
const finishReason = candidate.finishReason;
|
|
365
|
-
if ((_e = candidate.content) === null || _e === void 0 ? void 0 : _e.parts) {
|
|
366
|
-
candidate.content.parts.forEach((part) => {
|
|
367
|
-
if (part.functionCall) {
|
|
368
|
-
accumulatedToolCalls.push(part.functionCall);
|
|
369
|
-
}
|
|
370
|
-
});
|
|
371
360
|
}
|
|
372
|
-
if (
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
361
|
+
if (char === '\\' && inString) {
|
|
362
|
+
escapeNext = true;
|
|
363
|
+
i++;
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
366
|
+
if (char === '"') {
|
|
367
|
+
inString = !inString;
|
|
368
|
+
}
|
|
369
|
+
if (!inString) {
|
|
370
|
+
if (char === '{') {
|
|
371
|
+
if (depth === 0) {
|
|
372
|
+
objectStart = i;
|
|
373
|
+
}
|
|
374
|
+
depth++;
|
|
375
|
+
}
|
|
376
|
+
else if (char === '}') {
|
|
377
|
+
depth--;
|
|
378
|
+
if (depth === 0 && objectStart >= 0) {
|
|
379
|
+
const jsonStr = buffer.substring(objectStart, i + 1);
|
|
380
|
+
try {
|
|
381
|
+
const chunk = JSON.parse(jsonStr);
|
|
382
|
+
const candidate = (_a = chunk.candidates) === null || _a === void 0 ? void 0 : _a[0];
|
|
383
|
+
if (candidate) {
|
|
384
|
+
const content = this.extractContentText(candidate.content);
|
|
385
|
+
const finishReason = candidate.finishReason;
|
|
386
|
+
if ((_b = candidate.content) === null || _b === void 0 ? void 0 : _b.parts) {
|
|
387
|
+
candidate.content.parts.forEach((part) => {
|
|
388
|
+
if (part.functionCall) {
|
|
389
|
+
accumulatedToolCalls.push(part.functionCall);
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
if (content || finishReason) {
|
|
394
|
+
const streamChunk = {
|
|
395
|
+
content,
|
|
396
|
+
finishReason,
|
|
397
|
+
};
|
|
398
|
+
if (finishReason && accumulatedToolCalls.length > 0) {
|
|
399
|
+
streamChunk.toolCalls = accumulatedToolCalls.map((fc, idx) => ({
|
|
400
|
+
id: `call_${Date.now()}_${idx}`,
|
|
401
|
+
type: 'function',
|
|
402
|
+
function: {
|
|
403
|
+
name: fc.name,
|
|
404
|
+
arguments: JSON.stringify(fc.args),
|
|
405
|
+
},
|
|
406
|
+
}));
|
|
407
|
+
}
|
|
408
|
+
yield yield __await(streamChunk);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
catch (e) {
|
|
413
|
+
console.warn('Failed to parse chunk:', jsonStr.substring(0, 100));
|
|
414
|
+
}
|
|
415
|
+
buffer = buffer.substring(i + 1);
|
|
416
|
+
i = 0;
|
|
417
|
+
objectStart = -1;
|
|
418
|
+
continue;
|
|
419
|
+
}
|
|
386
420
|
}
|
|
387
|
-
yield yield __await(streamChunk);
|
|
388
421
|
}
|
|
422
|
+
i++;
|
|
389
423
|
}
|
|
390
|
-
|
|
391
|
-
buffer
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
396
|
-
continue;
|
|
424
|
+
if (objectStart >= 0) {
|
|
425
|
+
buffer = buffer.substring(objectStart);
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
buffer = buffer.replace(/^[\[\],\s]+/, '');
|
|
397
429
|
}
|
|
398
430
|
}
|
|
399
431
|
}
|
|
400
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
401
432
|
finally {
|
|
402
|
-
|
|
403
|
-
if (!_g && !_a && (_b = _h.return)) yield __await(_b.call(_h));
|
|
404
|
-
}
|
|
405
|
-
finally { if (e_1) throw e_1.error; }
|
|
406
|
-
}
|
|
407
|
-
if (buffer.trim()) {
|
|
408
|
-
try {
|
|
409
|
-
const chunk = JSON.parse(buffer);
|
|
410
|
-
const candidate = (_f = chunk.candidates) === null || _f === void 0 ? void 0 : _f[0];
|
|
411
|
-
if (candidate) {
|
|
412
|
-
const content = this.extractContentText(candidate.content);
|
|
413
|
-
const finishReason = candidate.finishReason;
|
|
414
|
-
if (content || finishReason) {
|
|
415
|
-
yield yield __await({ content, finishReason });
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
catch (e) {
|
|
420
|
-
}
|
|
433
|
+
reader.releaseLock();
|
|
421
434
|
}
|
|
422
435
|
});
|
|
423
436
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/adapters/google.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseAdapter } from './base/BaseAdapter';\nimport { ChatOptions, ChatResponse, StreamChunk, Message, MessageContent, ContentPart, Tool, ToolChoice, ToolCall, ResponseFormat, ModelInfo } from '../types';\nimport { streamLines } from '../utils/stream';\nimport { handleProviderError } from '../utils/errors';\nimport { contentToString } from '../utils/content-helpers';\nimport { getModelInfo } from '../models';\n\ninterface GooglePart {\n\ttext?: string;\n\tinlineData?: {\n\t\tmimeType: string;\n\t\tdata: string; // base64 encoded\n\t};\n\tfileData?: {\n\t\tmimeType: string;\n\t\tfileUri: string;\n\t};\n\tfunctionCall?: GoogleFunctionCall;\n\tfunctionResponse?: GoogleFunctionResponse;\n}\n\ninterface GoogleContent {\n\trole: string;\n\tparts: GooglePart[];\n}\n\ninterface GoogleFunctionDeclaration {\n\tname: string;\n\tdescription: string;\n\tparameters?: object; // JSON Schema\n}\n\ninterface GoogleTool {\n\tfunctionDeclarations?: GoogleFunctionDeclaration[];\n\tcodeExecution?: {}; // Empty object enables code execution\n}\n\ninterface GoogleToolConfig {\n\tfunctionCallingConfig?: {\n\t\tmode?: 'AUTO' | 'ANY' | 'NONE';\n\t\tallowedFunctionNames?: string[];\n\t};\n}\n\ninterface GoogleFunctionCall {\n\tname: string;\n\targs: object; // Already parsed object (unlike OpenAI's JSON string)\n}\n\ninterface GoogleFunctionResponse {\n\tname: string;\n\tresponse: object;\n}\n\ninterface GoogleSafetySetting {\n\tcategory: string;\n\tthreshold: string;\n}\n\ninterface GoogleGenerationConfig {\n\ttemperature?: number;\n\tmaxOutputTokens?: number;\n\ttopP?: number;\n\ttopK?: number;\n\tstopSequences?: string[];\n\tcandidateCount?: number;\n\tpresencePenalty?: number;\n\tfrequencyPenalty?: number;\n\tresponseLogprobs?: boolean;\n\tlogprobs?: number;\n\tseed?: number;\n\tresponseMimeType?: string;\n\tresponseSchema?: object;\n\tresponseModalities?: string[]; // For multimodal outputs (e.g., ['Text', 'Image'])\n}\n\ninterface GoogleRequest {\n\tcontents: GoogleContent[];\n\tgenerationConfig?: GoogleGenerationConfig;\n\tsystemInstruction?: {\n\t\tparts: GooglePart[];\n\t};\n\ttools?: GoogleTool[];\n\ttoolConfig?: GoogleToolConfig;\n\tsafetySettings?: GoogleSafetySetting[];\n\tcachedContent?: string;\n}\n\n/**\n * Google Gemini API adapter\n */\nexport class GoogleAdapter extends BaseAdapter {\n\tget name(): string {\n\t\treturn 'google';\n\t}\n\n\tasync chat(options: ChatOptions): Promise<ChatResponse | AsyncIterable<StreamChunk>> {\n\t\ttry {\n\t\t\tconst apiKey = this.getApiKey(options);\n\t\t\tconst baseUrl = this.getBaseUrl('https://generativelanguage.googleapis.com/v1beta');\n\n\t\t\t// Strip provider prefix from model if present (e.g., \"google/models/gemini-2.5-pro\" -> \"models/gemini-2.5-pro\")\n\t\t\tlet model = options.model.replace(/^google\\//, '');\n\n\t\t\t// Ensure model has \"models/\" prefix for API\n\t\t\tif (!model.startsWith('models/')) {\n\t\t\t\tmodel = `models/${model}`;\n\t\t\t}\n\n\t\t\t// Get model info for capabilities\n\t\t\tconst fullModelName = options.model.startsWith('google/') ? options.model : `google/${model}`;\n\t\t\tconst modelInfo = this.getModelCapabilities(fullModelName);\n\n\t\t\t// Extract system message if present\n\t\t\tconst systemMessage = options.messages.find((m) => m.role === 'system');\n\t\t\tconst nonSystemMessages = options.messages.filter((m) => m.role !== 'system');\n\n\t\t\tconst request: GoogleRequest = {\n\t\t\t\tcontents: this.transformMessages(nonSystemMessages),\n\t\t\t};\n\n\t\t\t// Add system instruction\n\t\t\tif (systemMessage) {\n\t\t\t\trequest.systemInstruction = {\n\t\t\t\t\tparts: [{ text: contentToString(systemMessage.content) }],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Add generation config\n\t\t\tconst generationConfig: GoogleGenerationConfig = {};\n\t\t\tif (options.temperature !== undefined) generationConfig.temperature = options.temperature;\n\t\t\tif (options.maxTokens !== undefined) generationConfig.maxOutputTokens = options.maxTokens;\n\t\t\tif (options.topP !== undefined) generationConfig.topP = options.topP;\n\t\t\tif (options.topK !== undefined) generationConfig.topK = options.topK;\n\t\t\tif (options.stop && Array.isArray(options.stop)) {\n\t\t\t\tgenerationConfig.stopSequences = options.stop;\n\t\t\t}\n\n\t\t\t// Advanced parameters\n\t\t\tif (options.n !== undefined) generationConfig.candidateCount = options.n;\n\t\t\tif (options.frequencyPenalty !== undefined) generationConfig.frequencyPenalty = options.frequencyPenalty;\n\t\t\tif (options.presencePenalty !== undefined) generationConfig.presencePenalty = options.presencePenalty;\n\t\t\tif (options.seed !== undefined) generationConfig.seed = options.seed;\n\t\t\tif (options.logprobs !== undefined) {\n\t\t\t\tgenerationConfig.responseLogprobs = options.logprobs;\n\t\t\t\tif (options.topLogprobs !== undefined) {\n\t\t\t\t\tgenerationConfig.logprobs = options.topLogprobs;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Response format / JSON mode\n\t\t\tif (options.responseFormat) {\n\t\t\t\tconst format = this.transformResponseFormat(options.responseFormat);\n\t\t\t\tif (format.responseMimeType) {\n\t\t\t\t\tgenerationConfig.responseMimeType = format.responseMimeType;\n\t\t\t\t}\n\t\t\t\tif (format.responseSchema) {\n\t\t\t\t\tgenerationConfig.responseSchema = format.responseSchema;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Response modalities for multimodal output (e.g., text + image generation)\n\t\t\tif (modelInfo?.responseModalities && modelInfo.responseModalities.length > 0) {\n\t\t\t\tgenerationConfig.responseModalities = modelInfo.responseModalities;\n\t\t\t}\n\n\t\t\tif (Object.keys(generationConfig).length > 0) {\n\t\t\t\trequest.generationConfig = generationConfig;\n\t\t\t}\n\n\t\t\t// Add tools if provided\n\t\t\tif (options.tools && options.tools.length > 0) {\n\t\t\t\trequest.tools = this.transformTools(options.tools);\n\n\t\t\t\tif (options.toolChoice) {\n\t\t\t\t\trequest.toolConfig = this.transformToolChoice(options.toolChoice);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Merge provider-specific options\n\t\t\tif (options.providerOptions) {\n\t\t\t\tObject.assign(request, options.providerOptions);\n\t\t\t}\n\n\t\t\tconst endpoint = options.stream ? 'streamGenerateContent' : 'generateContent';\n\t\t\tconst url = `${baseUrl}/${model}:${endpoint}?key=${apiKey}`;\n\n\t\t\tconst response = await this.fetchWithErrorHandling(\n\t\t\t\turl,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify(request),\n\t\t\t\t},\n\t\t\t\tthis.name\n\t\t\t);\n\n\t\t\tif (options.stream) {\n\t\t\t\treturn this.handleStreamResponse(response, model);\n\t\t\t}\n\n\t\t\treturn this.handleNonStreamResponse(await response.json(), model);\n\t\t} catch (error) {\n\t\t\thandleProviderError(error, this.name);\n\t\t}\n\t}\n\n\tprivate transformMessages(messages: Message[]): GoogleContent[] {\n\t\treturn messages.map((msg) => ({\n\t\t\trole: msg.role === 'assistant' ? 'model' : msg.role === 'tool' ? 'function' : 'user',\n\t\t\tparts: this.transformContentParts(msg.content, msg),\n\t\t}));\n\t}\n\n\tprivate transformContentParts(content: MessageContent, msg: Message): GooglePart[] {\n\t\t// Handle tool call responses (tool role messages)\n\t\tif (msg.role === 'tool' && msg.tool_call_id) {\n\t\t\treturn [{\n\t\t\t\tfunctionResponse: {\n\t\t\t\t\tname: msg.name || 'unknown',\n\t\t\t\t\tresponse: typeof content === 'string'\n\t\t\t\t\t\t? { result: content }\n\t\t\t\t\t\t: { result: JSON.stringify(content) },\n\t\t\t\t},\n\t\t\t}];\n\t\t}\n\n\t\t// Handle assistant messages with tool calls\n\t\tif (msg.role === 'assistant' && msg.tool_calls && msg.tool_calls.length > 0) {\n\t\t\tconst parts: GooglePart[] = [];\n\n\t\t\t// Add text content if present\n\t\t\tif (content) {\n\t\t\t\tparts.push(...this.transformRegularContent(content));\n\t\t\t}\n\n\t\t\t// Add function calls\n\t\t\tmsg.tool_calls.forEach(toolCall => {\n\t\t\t\tparts.push({\n\t\t\t\t\tfunctionCall: {\n\t\t\t\t\t\tname: toolCall.function.name,\n\t\t\t\t\t\targs: JSON.parse(toolCall.function.arguments),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn parts;\n\t\t}\n\n\t\t// Regular content (text or multimodal)\n\t\treturn this.transformRegularContent(content);\n\t}\n\n\tprivate transformRegularContent(content: MessageContent): GooglePart[] {\n\t\t// Simple string content\n\t\tif (typeof content === 'string') {\n\t\t\treturn [{ text: content }];\n\t\t}\n\n\t\t// Array of content parts (multimodal)\n\t\treturn content.map(part => {\n\t\t\tif (part.type === 'text') {\n\t\t\t\treturn { text: part.text || '' };\n\t\t\t}\n\n\t\t\tif (part.type === 'image_url' && part.image_url) {\n\t\t\t\treturn this.transformImagePart(part.image_url);\n\t\t\t}\n\n\t\t\tthrow new Error(`Unsupported content part type: ${part.type}`);\n\t\t});\n\t}\n\n\tprivate transformImagePart(imageUrl: { url: string; detail?: string; }): GooglePart {\n\t\tconst url = imageUrl.url;\n\n\t\t// Data URL (base64) - e.g., \"data:image/jpeg;base64,...\"\n\t\tif (url.startsWith('data:')) {\n\t\t\tconst match = url.match(/^data:([^;]+);base64,(.+)$/);\n\t\t\tif (!match) {\n\t\t\t\tthrow new Error('Invalid data URL format. Expected: data:mime/type;base64,<data>');\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tinlineData: {\n\t\t\t\t\tmimeType: match[1],\n\t\t\t\t\tdata: match[2],\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Google Files API URL\n\t\tif (url.startsWith('https://generativelanguage.googleapis.com/v1beta/files/')) {\n\t\t\tconst mimeType = this.getMimeTypeFromUrl(url);\n\t\t\treturn {\n\t\t\t\tfileData: {\n\t\t\t\t\tmimeType,\n\t\t\t\t\tfileUri: url,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// External URL - not directly supported by Google\n\t\tthrow new Error(\n\t\t\t'External image URLs not supported by Google Gemini. ' +\n\t\t\t'Use data URLs (base64) or upload to Files API first. ' +\n\t\t\t'See: https://ai.google.dev/gemini-api/docs/prompting_with_media'\n\t\t);\n\t}\n\n\tprivate getMimeTypeFromUrl(url: string): string {\n\t\tconst ext = url.split('.').pop()?.toLowerCase();\n\t\tconst mimeTypes: Record<string, string> = {\n\t\t\t// Images\n\t\t\t'jpg': 'image/jpeg',\n\t\t\t'jpeg': 'image/jpeg',\n\t\t\t'png': 'image/png',\n\t\t\t'gif': 'image/gif',\n\t\t\t'webp': 'image/webp',\n\t\t\t'heic': 'image/heic',\n\t\t\t'heif': 'image/heif',\n\t\t\t// Audio\n\t\t\t'mp3': 'audio/mp3',\n\t\t\t'wav': 'audio/wav',\n\t\t\t'aiff': 'audio/aiff',\n\t\t\t'aac': 'audio/aac',\n\t\t\t'ogg': 'audio/ogg',\n\t\t\t'flac': 'audio/flac',\n\t\t\t// Video\n\t\t\t'mp4': 'video/mp4',\n\t\t\t'mpeg': 'video/mpeg',\n\t\t\t'mov': 'video/mov',\n\t\t\t'avi': 'video/avi',\n\t\t\t'flv': 'video/x-flv',\n\t\t\t'mpg': 'video/mpg',\n\t\t\t'webm': 'video/webm',\n\t\t\t'wmv': 'video/wmv',\n\t\t\t'3gpp': 'video/3gpp',\n\t\t\t// Documents\n\t\t\t'pdf': 'application/pdf',\n\t\t\t'txt': 'text/plain',\n\t\t\t'html': 'text/html',\n\t\t\t'css': 'text/css',\n\t\t\t'md': 'text/md',\n\t\t\t'csv': 'text/csv',\n\t\t\t'xml': 'text/xml',\n\t\t\t'rtf': 'text/rtf',\n\t\t};\n\t\treturn mimeTypes[ext || ''] || 'application/octet-stream';\n\t}\n\n\tprivate transformTools(tools: Tool[]): GoogleTool[] {\n\t\tconst functionDeclarations = tools.map(tool => ({\n\t\t\tname: tool.function.name,\n\t\t\tdescription: tool.function.description || '',\n\t\t\tparameters: tool.function.parameters,\n\t\t}));\n\n\t\treturn [{ functionDeclarations }];\n\t}\n\n\tprivate transformToolChoice(toolChoice: ToolChoice): GoogleToolConfig {\n\t\tif (typeof toolChoice === 'string') {\n\t\t\tconst modeMap: Record<string, 'AUTO' | 'ANY' | 'NONE'> = {\n\t\t\t\t'auto': 'AUTO',\n\t\t\t\t'required': 'ANY',\n\t\t\t\t'none': 'NONE',\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tfunctionCallingConfig: {\n\t\t\t\t\tmode: modeMap[toolChoice] || 'AUTO',\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Specific function requested\n\t\tif ('function' in toolChoice) {\n\t\t\treturn {\n\t\t\t\tfunctionCallingConfig: {\n\t\t\t\t\tmode: 'ANY',\n\t\t\t\t\tallowedFunctionNames: [toolChoice.function.name],\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn { functionCallingConfig: { mode: 'AUTO' } };\n\t}\n\n\tprivate transformResponseFormat(format: ResponseFormat): {\n\t\tresponseMimeType?: string;\n\t\tresponseSchema?: object;\n\t} {\n\t\tif (format.type === 'json_object') {\n\t\t\treturn { responseMimeType: 'application/json' };\n\t\t}\n\n\t\tif (format.type === 'json_schema' && format.json_schema) {\n\t\t\treturn {\n\t\t\t\tresponseMimeType: 'application/json',\n\t\t\t\tresponseSchema: format.json_schema.schema,\n\t\t\t};\n\t\t}\n\n\t\treturn {};\n\t}\n\n\tprivate handleNonStreamResponse(data: any, model: string): ChatResponse {\n\t\tconst candidate = data.candidates?.[0];\n\t\tif (!candidate) {\n\t\t\tthrow new Error('No candidates in response');\n\t\t}\n\n\t\tconst content = this.extractContentText(candidate.content);\n\t\tconst toolCalls = this.extractToolCalls(candidate.content);\n\n\t\t// Check for safety blocks\n\t\tif (candidate.safetyRatings) {\n\t\t\tconst blocked = candidate.safetyRatings.some((r: any) => r.blocked);\n\t\t\tif (blocked) {\n\t\t\t\tconsole.warn('Content blocked by safety filters:', candidate.safetyRatings);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontent,\n\t\t\tfinishReason: candidate.finishReason,\n\t\t\ttoolCalls,\n\t\t\tusage: data.usageMetadata ? {\n\t\t\t\tpromptTokens: data.usageMetadata.promptTokenCount || 0,\n\t\t\t\tcompletionTokens: data.usageMetadata.candidatesTokenCount || 0,\n\t\t\t\ttotalTokens: data.usageMetadata.totalTokenCount || 0,\n\t\t\t} : undefined,\n\t\t\tmodel,\n\t\t\traw: data,\n\t\t};\n\t}\n\n\tprivate extractContentText(content: GoogleContent): string {\n\t\tif (!content?.parts) return '';\n\n\t\treturn content.parts\n\t\t\t.filter(part => part.text)\n\t\t\t.map(part => part.text)\n\t\t\t.join('');\n\t}\n\n\tprivate extractToolCalls(content: GoogleContent): ToolCall[] | undefined {\n\t\tif (!content?.parts) return undefined;\n\n\t\tconst toolCalls: ToolCall[] = [];\n\n\t\tcontent.parts.forEach((part, index) => {\n\t\t\tif (part.functionCall) {\n\t\t\t\ttoolCalls.push({\n\t\t\t\t\tid: `call_${Date.now()}_${index}`, // Google doesn't provide IDs, so we generate them\n\t\t\t\t\ttype: 'function',\n\t\t\t\t\tfunction: {\n\t\t\t\t\t\tname: part.functionCall.name,\n\t\t\t\t\t\targuments: JSON.stringify(part.functionCall.args), // Convert object to JSON string for unified interface\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn toolCalls.length > 0 ? toolCalls : undefined;\n\t}\n\n\tprivate async *handleStreamResponse(response: Response, model: string): AsyncIterable<StreamChunk> {\n\t\tif (!response.body) {\n\t\t\tthrow new Error('No response body for streaming');\n\t\t}\n\n\t\tconst accumulatedToolCalls: GoogleFunctionCall[] = [];\n\t\tlet buffer = ''; // Buffer for incomplete JSON chunks\n\n\t\tfor await (const line of streamLines(response.body)) {\n\t\t\tif (!line.trim() || line.trim() === '[' || line.trim() === ']') continue;\n\n\t\t\t// Remove trailing comma if present\n\t\t\tconst cleanLine = line.trim().replace(/,$/, '');\n\n\t\t\ttry {\n\t\t\t\t// Try to parse current line\n\t\t\t\tconst chunk = JSON.parse(buffer + cleanLine);\n\t\t\t\tbuffer = ''; // Clear buffer on success\n\n\t\t\t\tconst candidate = chunk.candidates?.[0];\n\n\t\t\t\tif (!candidate) continue;\n\n\t\t\t\tconst content = this.extractContentText(candidate.content);\n\t\t\t\tconst finishReason = candidate.finishReason;\n\n\t\t\t\t// Accumulate tool calls\n\t\t\t\tif (candidate.content?.parts) {\n\t\t\t\t\tcandidate.content.parts.forEach((part: GooglePart) => {\n\t\t\t\t\t\tif (part.functionCall) {\n\t\t\t\t\t\t\taccumulatedToolCalls.push(part.functionCall);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (content || finishReason) {\n\t\t\t\t\tconst streamChunk: StreamChunk = {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tfinishReason,\n\t\t\t\t\t};\n\n\t\t\t\t\t// Include tool calls on finish\n\t\t\t\t\tif (finishReason && accumulatedToolCalls.length > 0) {\n\t\t\t\t\t\tstreamChunk.toolCalls = accumulatedToolCalls.map((fc, i) => ({\n\t\t\t\t\t\t\tid: `call_${Date.now()}_${i}`,\n\t\t\t\t\t\t\ttype: 'function' as const,\n\t\t\t\t\t\t\tfunction: {\n\t\t\t\t\t\t\t\tname: fc.name,\n\t\t\t\t\t\t\t\targuments: JSON.stringify(fc.args),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\n\t\t\t\t\tyield streamChunk;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// Accumulate incomplete JSON chunks\n\t\t\t\tbuffer += cleanLine;\n\t\t\t\t// If buffer gets too large, it's likely an error, not incomplete JSON\n\t\t\t\tif (buffer.length > 100000) {\n\t\t\t\t\tconsole.warn('Google streaming: Buffer exceeded limit, clearing');\n\t\t\t\t\tbuffer = '';\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// Try to parse any remaining buffer content\n\t\tif (buffer.trim()) {\n\t\t\ttry {\n\t\t\t\tconst chunk = JSON.parse(buffer);\n\t\t\t\tconst candidate = chunk.candidates?.[0];\n\t\t\t\tif (candidate) {\n\t\t\t\t\tconst content = this.extractContentText(candidate.content);\n\t\t\t\t\tconst finishReason = candidate.finishReason;\n\t\t\t\t\tif (content || finishReason) {\n\t\t\t\t\t\tyield { content, finishReason };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// Final buffer content was invalid, skip\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Get model capabilities from models registry\n\t */\n\tprivate getModelCapabilities(fullModelName: string): ModelInfo | undefined {\n\t\treturn getModelInfo(fullModelName);\n\t}\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/adapters/google.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseAdapter } from './base/BaseAdapter';\nimport { ChatOptions, ChatResponse, StreamChunk, Message, MessageContent, ContentPart, Tool, ToolChoice, ToolCall, ResponseFormat, ModelInfo } from '../types';\nimport { streamLines } from '../utils/stream';\nimport { handleProviderError } from '../utils/errors';\nimport { contentToString } from '../utils/content-helpers';\nimport { getModelInfo } from '../models';\n\ninterface GooglePart {\n\ttext?: string;\n\tinlineData?: {\n\t\tmimeType: string;\n\t\tdata: string; // base64 encoded\n\t};\n\tfileData?: {\n\t\tmimeType: string;\n\t\tfileUri: string;\n\t};\n\tfunctionCall?: GoogleFunctionCall;\n\tfunctionResponse?: GoogleFunctionResponse;\n}\n\ninterface GoogleContent {\n\trole: string;\n\tparts: GooglePart[];\n}\n\ninterface GoogleFunctionDeclaration {\n\tname: string;\n\tdescription: string;\n\tparameters?: object; // JSON Schema\n}\n\ninterface GoogleTool {\n\tfunctionDeclarations?: GoogleFunctionDeclaration[];\n\tcodeExecution?: {}; // Empty object enables code execution\n}\n\ninterface GoogleToolConfig {\n\tfunctionCallingConfig?: {\n\t\tmode?: 'AUTO' | 'ANY' | 'NONE';\n\t\tallowedFunctionNames?: string[];\n\t};\n}\n\ninterface GoogleFunctionCall {\n\tname: string;\n\targs: object; // Already parsed object (unlike OpenAI's JSON string)\n}\n\ninterface GoogleFunctionResponse {\n\tname: string;\n\tresponse: object;\n}\n\ninterface GoogleSafetySetting {\n\tcategory: string;\n\tthreshold: string;\n}\n\ninterface GoogleGenerationConfig {\n\ttemperature?: number;\n\tmaxOutputTokens?: number;\n\ttopP?: number;\n\ttopK?: number;\n\tstopSequences?: string[];\n\tcandidateCount?: number;\n\tpresencePenalty?: number;\n\tfrequencyPenalty?: number;\n\tresponseLogprobs?: boolean;\n\tlogprobs?: number;\n\tseed?: number;\n\tresponseMimeType?: string;\n\tresponseSchema?: object;\n\tresponseModalities?: string[]; // For multimodal outputs (e.g., ['Text', 'Image'])\n}\n\ninterface GoogleRequest {\n\tcontents: GoogleContent[];\n\tgenerationConfig?: GoogleGenerationConfig;\n\tsystemInstruction?: {\n\t\tparts: GooglePart[];\n\t};\n\ttools?: GoogleTool[];\n\ttoolConfig?: GoogleToolConfig;\n\tsafetySettings?: GoogleSafetySetting[];\n\tcachedContent?: string;\n}\n\n/**\n * Google Gemini API adapter\n */\nexport class GoogleAdapter extends BaseAdapter {\n\tget name(): string {\n\t\treturn 'google';\n\t}\n\n\tasync chat(options: ChatOptions): Promise<ChatResponse | AsyncIterable<StreamChunk>> {\n\t\ttry {\n\t\t\tconst apiKey = this.getApiKey(options);\n\t\t\tconst baseUrl = this.getBaseUrl('https://generativelanguage.googleapis.com/v1beta');\n\n\t\t\t// Strip provider prefix from model if present (e.g., \"google/models/gemini-2.5-pro\" -> \"models/gemini-2.5-pro\")\n\t\t\tlet model = options.model.replace(/^google\\//, '');\n\n\t\t\t// Ensure model has \"models/\" prefix for API\n\t\t\tif (!model.startsWith('models/')) {\n\t\t\t\tmodel = `models/${model}`;\n\t\t\t}\n\n\t\t\t// Get model info for capabilities\n\t\t\tconst fullModelName = options.model.startsWith('google/') ? options.model : `google/${model}`;\n\t\t\tconst modelInfo = this.getModelCapabilities(fullModelName);\n\n\t\t\t// Extract system message if present\n\t\t\tconst systemMessage = options.messages.find((m) => m.role === 'system');\n\t\t\tconst nonSystemMessages = options.messages.filter((m) => m.role !== 'system');\n\n\t\t\tconst request: GoogleRequest = {\n\t\t\t\tcontents: this.transformMessages(nonSystemMessages),\n\t\t\t};\n\n\t\t\t// Add system instruction\n\t\t\tif (systemMessage) {\n\t\t\t\trequest.systemInstruction = {\n\t\t\t\t\tparts: [{ text: contentToString(systemMessage.content) }],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Add generation config\n\t\t\tconst generationConfig: GoogleGenerationConfig = {};\n\t\t\tif (options.temperature !== undefined) generationConfig.temperature = options.temperature;\n\t\t\tif (options.maxTokens !== undefined) generationConfig.maxOutputTokens = options.maxTokens;\n\t\t\tif (options.topP !== undefined) generationConfig.topP = options.topP;\n\t\t\tif (options.topK !== undefined) generationConfig.topK = options.topK;\n\t\t\tif (options.stop && Array.isArray(options.stop)) {\n\t\t\t\tgenerationConfig.stopSequences = options.stop;\n\t\t\t}\n\n\t\t\t// Advanced parameters\n\t\t\tif (options.n !== undefined) generationConfig.candidateCount = options.n;\n\t\t\tif (options.frequencyPenalty !== undefined) generationConfig.frequencyPenalty = options.frequencyPenalty;\n\t\t\tif (options.presencePenalty !== undefined) generationConfig.presencePenalty = options.presencePenalty;\n\t\t\tif (options.seed !== undefined) generationConfig.seed = options.seed;\n\t\t\tif (options.logprobs !== undefined) {\n\t\t\t\tgenerationConfig.responseLogprobs = options.logprobs;\n\t\t\t\tif (options.topLogprobs !== undefined) {\n\t\t\t\t\tgenerationConfig.logprobs = options.topLogprobs;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Response format / JSON mode\n\t\t\tif (options.responseFormat) {\n\t\t\t\tconst format = this.transformResponseFormat(options.responseFormat);\n\t\t\t\tif (format.responseMimeType) {\n\t\t\t\t\tgenerationConfig.responseMimeType = format.responseMimeType;\n\t\t\t\t}\n\t\t\t\tif (format.responseSchema) {\n\t\t\t\t\tgenerationConfig.responseSchema = format.responseSchema;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Response modalities for multimodal output (e.g., text + image generation)\n\t\t\tif (modelInfo?.responseModalities && modelInfo.responseModalities.length > 0) {\n\t\t\t\tgenerationConfig.responseModalities = modelInfo.responseModalities;\n\t\t\t}\n\n\t\t\tif (Object.keys(generationConfig).length > 0) {\n\t\t\t\trequest.generationConfig = generationConfig;\n\t\t\t}\n\n\t\t\t// Add tools if provided\n\t\t\tif (options.tools && options.tools.length > 0) {\n\t\t\t\trequest.tools = this.transformTools(options.tools);\n\n\t\t\t\tif (options.toolChoice) {\n\t\t\t\t\trequest.toolConfig = this.transformToolChoice(options.toolChoice);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Merge provider-specific options\n\t\t\tif (options.providerOptions) {\n\t\t\t\tObject.assign(request, options.providerOptions);\n\t\t\t}\n\n\t\t\tconst endpoint = options.stream ? 'streamGenerateContent' : 'generateContent';\n\t\t\tconst url = `${baseUrl}/${model}:${endpoint}?key=${apiKey}`;\n\n\t\t\tconst response = await this.fetchWithErrorHandling(\n\t\t\t\turl,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify(request),\n\t\t\t\t},\n\t\t\t\tthis.name\n\t\t\t);\n\n\t\t\tif (options.stream) {\n\t\t\t\treturn this.handleStreamResponse(response, model);\n\t\t\t}\n\n\t\t\treturn this.handleNonStreamResponse(await response.json(), model);\n\t\t} catch (error) {\n\t\t\thandleProviderError(error, this.name);\n\t\t}\n\t}\n\n\tprivate transformMessages(messages: Message[]): GoogleContent[] {\n\t\treturn messages.map((msg) => ({\n\t\t\trole: msg.role === 'assistant' ? 'model' : msg.role === 'tool' ? 'function' : 'user',\n\t\t\tparts: this.transformContentParts(msg.content, msg),\n\t\t}));\n\t}\n\n\tprivate transformContentParts(content: MessageContent, msg: Message): GooglePart[] {\n\t\t// Handle tool call responses (tool role messages)\n\t\tif (msg.role === 'tool' && msg.tool_call_id) {\n\t\t\treturn [{\n\t\t\t\tfunctionResponse: {\n\t\t\t\t\tname: msg.name || 'unknown',\n\t\t\t\t\tresponse: typeof content === 'string'\n\t\t\t\t\t\t? { result: content }\n\t\t\t\t\t\t: { result: JSON.stringify(content) },\n\t\t\t\t},\n\t\t\t}];\n\t\t}\n\n\t\t// Handle assistant messages with tool calls\n\t\tif (msg.role === 'assistant' && msg.tool_calls && msg.tool_calls.length > 0) {\n\t\t\tconst parts: GooglePart[] = [];\n\n\t\t\t// Add text content if present\n\t\t\tif (content) {\n\t\t\t\tparts.push(...this.transformRegularContent(content));\n\t\t\t}\n\n\t\t\t// Add function calls\n\t\t\tmsg.tool_calls.forEach(toolCall => {\n\t\t\t\tparts.push({\n\t\t\t\t\tfunctionCall: {\n\t\t\t\t\t\tname: toolCall.function.name,\n\t\t\t\t\t\targs: JSON.parse(toolCall.function.arguments),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn parts;\n\t\t}\n\n\t\t// Regular content (text or multimodal)\n\t\treturn this.transformRegularContent(content);\n\t}\n\n\tprivate transformRegularContent(content: MessageContent): GooglePart[] {\n\t\t// Simple string content\n\t\tif (typeof content === 'string') {\n\t\t\treturn [{ text: content }];\n\t\t}\n\n\t\t// Array of content parts (multimodal)\n\t\treturn content.map(part => {\n\t\t\tif (part.type === 'text') {\n\t\t\t\treturn { text: part.text || '' };\n\t\t\t}\n\n\t\t\tif (part.type === 'image_url' && part.image_url) {\n\t\t\t\treturn this.transformImagePart(part.image_url);\n\t\t\t}\n\n\t\t\tthrow new Error(`Unsupported content part type: ${part.type}`);\n\t\t});\n\t}\n\n\tprivate transformImagePart(imageUrl: { url: string; detail?: string; }): GooglePart {\n\t\tconst url = imageUrl.url;\n\n\t\t// Data URL (base64) - e.g., \"data:image/jpeg;base64,...\"\n\t\tif (url.startsWith('data:')) {\n\t\t\tconst match = url.match(/^data:([^;]+);base64,(.+)$/);\n\t\t\tif (!match) {\n\t\t\t\tthrow new Error('Invalid data URL format. Expected: data:mime/type;base64,<data>');\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tinlineData: {\n\t\t\t\t\tmimeType: match[1],\n\t\t\t\t\tdata: match[2],\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Google Files API URL\n\t\tif (url.startsWith('https://generativelanguage.googleapis.com/v1beta/files/')) {\n\t\t\tconst mimeType = this.getMimeTypeFromUrl(url);\n\t\t\treturn {\n\t\t\t\tfileData: {\n\t\t\t\t\tmimeType,\n\t\t\t\t\tfileUri: url,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// External URL - not directly supported by Google\n\t\tthrow new Error(\n\t\t\t'External image URLs not supported by Google Gemini. ' +\n\t\t\t'Use data URLs (base64) or upload to Files API first. ' +\n\t\t\t'See: https://ai.google.dev/gemini-api/docs/prompting_with_media'\n\t\t);\n\t}\n\n\tprivate getMimeTypeFromUrl(url: string): string {\n\t\tconst ext = url.split('.').pop()?.toLowerCase();\n\t\tconst mimeTypes: Record<string, string> = {\n\t\t\t// Images\n\t\t\t'jpg': 'image/jpeg',\n\t\t\t'jpeg': 'image/jpeg',\n\t\t\t'png': 'image/png',\n\t\t\t'gif': 'image/gif',\n\t\t\t'webp': 'image/webp',\n\t\t\t'heic': 'image/heic',\n\t\t\t'heif': 'image/heif',\n\t\t\t// Audio\n\t\t\t'mp3': 'audio/mp3',\n\t\t\t'wav': 'audio/wav',\n\t\t\t'aiff': 'audio/aiff',\n\t\t\t'aac': 'audio/aac',\n\t\t\t'ogg': 'audio/ogg',\n\t\t\t'flac': 'audio/flac',\n\t\t\t// Video\n\t\t\t'mp4': 'video/mp4',\n\t\t\t'mpeg': 'video/mpeg',\n\t\t\t'mov': 'video/mov',\n\t\t\t'avi': 'video/avi',\n\t\t\t'flv': 'video/x-flv',\n\t\t\t'mpg': 'video/mpg',\n\t\t\t'webm': 'video/webm',\n\t\t\t'wmv': 'video/wmv',\n\t\t\t'3gpp': 'video/3gpp',\n\t\t\t// Documents\n\t\t\t'pdf': 'application/pdf',\n\t\t\t'txt': 'text/plain',\n\t\t\t'html': 'text/html',\n\t\t\t'css': 'text/css',\n\t\t\t'md': 'text/md',\n\t\t\t'csv': 'text/csv',\n\t\t\t'xml': 'text/xml',\n\t\t\t'rtf': 'text/rtf',\n\t\t};\n\t\treturn mimeTypes[ext || ''] || 'application/octet-stream';\n\t}\n\n\tprivate transformTools(tools: Tool[]): GoogleTool[] {\n\t\tconst functionDeclarations = tools.map(tool => ({\n\t\t\tname: tool.function.name,\n\t\t\tdescription: tool.function.description || '',\n\t\t\tparameters: tool.function.parameters,\n\t\t}));\n\n\t\treturn [{ functionDeclarations }];\n\t}\n\n\tprivate transformToolChoice(toolChoice: ToolChoice): GoogleToolConfig {\n\t\tif (typeof toolChoice === 'string') {\n\t\t\tconst modeMap: Record<string, 'AUTO' | 'ANY' | 'NONE'> = {\n\t\t\t\t'auto': 'AUTO',\n\t\t\t\t'required': 'ANY',\n\t\t\t\t'none': 'NONE',\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tfunctionCallingConfig: {\n\t\t\t\t\tmode: modeMap[toolChoice] || 'AUTO',\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Specific function requested\n\t\tif ('function' in toolChoice) {\n\t\t\treturn {\n\t\t\t\tfunctionCallingConfig: {\n\t\t\t\t\tmode: 'ANY',\n\t\t\t\t\tallowedFunctionNames: [toolChoice.function.name],\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn { functionCallingConfig: { mode: 'AUTO' } };\n\t}\n\n\tprivate transformResponseFormat(format: ResponseFormat): {\n\t\tresponseMimeType?: string;\n\t\tresponseSchema?: object;\n\t} {\n\t\tif (format.type === 'json_object') {\n\t\t\treturn { responseMimeType: 'application/json' };\n\t\t}\n\n\t\tif (format.type === 'json_schema' && format.json_schema) {\n\t\t\treturn {\n\t\t\t\tresponseMimeType: 'application/json',\n\t\t\t\tresponseSchema: format.json_schema.schema,\n\t\t\t};\n\t\t}\n\n\t\treturn {};\n\t}\n\n\tprivate handleNonStreamResponse(data: any, model: string): ChatResponse {\n\t\tconst candidate = data.candidates?.[0];\n\t\tif (!candidate) {\n\t\t\tthrow new Error('No candidates in response');\n\t\t}\n\n\t\tconst content = this.extractContentText(candidate.content);\n\t\tconst toolCalls = this.extractToolCalls(candidate.content);\n\n\t\t// Check for safety blocks\n\t\tif (candidate.safetyRatings) {\n\t\t\tconst blocked = candidate.safetyRatings.some((r: any) => r.blocked);\n\t\t\tif (blocked) {\n\t\t\t\tconsole.warn('Content blocked by safety filters:', candidate.safetyRatings);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontent,\n\t\t\tfinishReason: candidate.finishReason,\n\t\t\ttoolCalls,\n\t\t\tusage: data.usageMetadata ? {\n\t\t\t\tpromptTokens: data.usageMetadata.promptTokenCount || 0,\n\t\t\t\tcompletionTokens: data.usageMetadata.candidatesTokenCount || 0,\n\t\t\t\ttotalTokens: data.usageMetadata.totalTokenCount || 0,\n\t\t\t} : undefined,\n\t\t\tmodel,\n\t\t\traw: data,\n\t\t};\n\t}\n\n\tprivate extractContentText(content: GoogleContent): string {\n\t\tif (!content?.parts) return '';\n\n\t\treturn content.parts\n\t\t\t.filter(part => part.text)\n\t\t\t.map(part => part.text)\n\t\t\t.join('');\n\t}\n\n\tprivate extractToolCalls(content: GoogleContent): ToolCall[] | undefined {\n\t\tif (!content?.parts) return undefined;\n\n\t\tconst toolCalls: ToolCall[] = [];\n\n\t\tcontent.parts.forEach((part, index) => {\n\t\t\tif (part.functionCall) {\n\t\t\t\ttoolCalls.push({\n\t\t\t\t\tid: `call_${Date.now()}_${index}`, // Google doesn't provide IDs, so we generate them\n\t\t\t\t\ttype: 'function',\n\t\t\t\t\tfunction: {\n\t\t\t\t\t\tname: part.functionCall.name,\n\t\t\t\t\t\targuments: JSON.stringify(part.functionCall.args), // Convert object to JSON string for unified interface\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn toolCalls.length > 0 ? toolCalls : undefined;\n\t}\n\n\tprivate async *handleStreamResponse(response: Response, model: string): AsyncIterable<StreamChunk> {\n\t\tif (!response.body) {\n\t\t\tthrow new Error('No response body for streaming');\n\t\t}\n\n\t\tconst accumulatedToolCalls: GoogleFunctionCall[] = [];\n\n\t\t// Google returns streaming response as a JSON array with objects sent progressively\n\t\t// Format: [{ obj1 }, { obj2 }, ... { objN }]\n\t\t// We need to parse each complete JSON object as it arrives and yield immediately\n\t\tconst reader = response.body.getReader();\n\t\tconst decoder = new TextDecoder();\n\t\tlet buffer = '';\n\t\tlet depth = 0;\n\t\tlet inString = false;\n\t\tlet escapeNext = false;\n\t\tlet objectStart = -1;\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst { done, value } = await reader.read();\n\n\t\t\t\tif (done) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\n\t\t\t\t// Parse JSON objects as they become complete in the buffer\n\t\t\t\tlet i = 0;\n\t\t\t\twhile (i < buffer.length) {\n\t\t\t\t\tconst char = buffer[i];\n\n\t\t\t\t\tif (escapeNext) {\n\t\t\t\t\t\tescapeNext = false;\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (char === '\\\\' && inString) {\n\t\t\t\t\t\tescapeNext = true;\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (char === '\"') {\n\t\t\t\t\t\tinString = !inString;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!inString) {\n\t\t\t\t\t\tif (char === '{') {\n\t\t\t\t\t\t\tif (depth === 0) {\n\t\t\t\t\t\t\t\tobjectStart = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdepth++;\n\t\t\t\t\t\t} else if (char === '}') {\n\t\t\t\t\t\t\tdepth--;\n\t\t\t\t\t\t\tif (depth === 0 && objectStart >= 0) {\n\t\t\t\t\t\t\t\t// Complete JSON object found\n\t\t\t\t\t\t\t\tconst jsonStr = buffer.substring(objectStart, i + 1);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst chunk = JSON.parse(jsonStr);\n\t\t\t\t\t\t\t\t\tconst candidate = chunk.candidates?.[0];\n\n\t\t\t\t\t\t\t\t\tif (candidate) {\n\t\t\t\t\t\t\t\t\t\tconst content = this.extractContentText(candidate.content);\n\t\t\t\t\t\t\t\t\t\tconst finishReason = candidate.finishReason;\n\n\t\t\t\t\t\t\t\t\t\t// Accumulate tool calls\n\t\t\t\t\t\t\t\t\t\tif (candidate.content?.parts) {\n\t\t\t\t\t\t\t\t\t\t\tcandidate.content.parts.forEach((part: GooglePart) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (part.functionCall) {\n\t\t\t\t\t\t\t\t\t\t\t\t\taccumulatedToolCalls.push(part.functionCall);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (content || finishReason) {\n\t\t\t\t\t\t\t\t\t\t\tconst streamChunk: StreamChunk = {\n\t\t\t\t\t\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t\t\t\t\t\t\tfinishReason,\n\t\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\t\t\t// Include tool calls on finish\n\t\t\t\t\t\t\t\t\t\t\tif (finishReason && accumulatedToolCalls.length > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tstreamChunk.toolCalls = accumulatedToolCalls.map((fc, idx) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\tid: `call_${Date.now()}_${idx}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype: 'function' as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\tfunction: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: fc.name,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targuments: JSON.stringify(fc.args),\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tyield streamChunk;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t// Invalid JSON object, skip\n\t\t\t\t\t\t\t\t\tconsole.warn('Failed to parse chunk:', jsonStr.substring(0, 100));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Remove parsed object from buffer\n\t\t\t\t\t\t\t\tbuffer = buffer.substring(i + 1);\n\t\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\t\tobjectStart = -1;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\t// Keep unparsed data in buffer for next iteration\n\t\t\t\tif (objectStart >= 0) {\n\t\t\t\t\tbuffer = buffer.substring(objectStart);\n\t\t\t\t} else {\n\t\t\t\t\t// No partial object, clear buffer of array markers and commas\n\t\t\t\t\tbuffer = buffer.replace(/^[\\[\\],\\s]+/, '');\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\treader.releaseLock();\n\t\t}\n\t}\n\n\t/**\n\t * Get model capabilities from models registry\n\t */\n\tprivate getModelCapabilities(fullModelName: string): ModelInfo | undefined {\n\t\treturn getModelInfo(fullModelName);\n\t}\n}\n\n"]}
|
package/build/models.d.ts
CHANGED
|
@@ -165,6 +165,15 @@ export declare const supportedModels: {
|
|
|
165
165
|
'openai/text-davinci-002': {
|
|
166
166
|
displayName: string;
|
|
167
167
|
};
|
|
168
|
+
'google/models/gemini-3-pro-image-preview': {
|
|
169
|
+
displayName: string;
|
|
170
|
+
reasoning: true;
|
|
171
|
+
responseModalities: string[];
|
|
172
|
+
};
|
|
173
|
+
'google/models/gemini-3-flash-preview': {
|
|
174
|
+
displayName: string;
|
|
175
|
+
reasoning: true;
|
|
176
|
+
};
|
|
168
177
|
'google/models/gemini-3-pro-preview': {
|
|
169
178
|
displayName: string;
|
|
170
179
|
reasoning: true;
|
package/build/models.js
CHANGED
|
@@ -51,6 +51,8 @@ exports.supportedModels = {
|
|
|
51
51
|
'openai/gpt-3.5-turbo-16k-0613': { displayName: 'gpt-3.5-turbo-16k-0613', enabled: false },
|
|
52
52
|
'openai/text-davinci-003': { displayName: 'text-davinci-003' },
|
|
53
53
|
'openai/text-davinci-002': { displayName: 'text-davinci-002' },
|
|
54
|
+
'google/models/gemini-3-pro-image-preview': { displayName: 'Gemini 3 Pro Image', reasoning: true, responseModalities: ['Text', 'Image'] },
|
|
55
|
+
'google/models/gemini-3-flash-preview': { displayName: 'Gemini 3 Flash', reasoning: true },
|
|
54
56
|
'google/models/gemini-3-pro-preview': { displayName: 'Gemini 3 Pro', reasoning: true },
|
|
55
57
|
'google/models/gemini-2.5-flash': { displayName: 'Gemini 2.5 Flash', reasoning: true },
|
|
56
58
|
'google/models/gemini-2.5-flash-lite-preview-06-17': { displayName: 'Gemini 2.5 Flash-Lite Preview 06-17', reasoning: true },
|
package/build/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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","sourcesContent":["import { ModelInfo } from './types';\n\n// Import the supported models data\nexport const supportedModels = {\n\t/* ---- OPENAI: ---- */\n\t'openai/gpt-5.2': { displayName: 'GPT-5.2', usesMaxCompletionTokens: true, reasoning: true, knownIssues: '' },\n\t'openai/gpt-5.1': { displayName: 'GPT-5.1', usesMaxCompletionTokens: true, reasoning: true, knownIssues: '' },\n\t'openai/gpt-5': { displayName: 'GPT-5', usesMaxCompletionTokens: true, reasoning: true, knownIssues: 'Highly unpredictable reasoning token usage (can use 1000+ tokens); recommend 1500+ max_completion_tokens for reliability' },\n\t'openai/gpt-5-mini': { displayName: 'GPT-5 mini', usesMaxCompletionTokens: true, reasoning: true },\n\t'openai/gpt-5-nano': { displayName: 'GPT-5 nano', usesMaxCompletionTokens: true, reasoning: true },\n\t'openai/gpt-5-chat-latest': { displayName: 'GPT-5 Chat', usesMaxCompletionTokens: true },\n\t'openai/gpt-4.1': { displayName: 'GPT 4.1', usesMaxCompletionTokens: true },\n\t'openai/gpt-4.1-mini': { displayName: 'GPT 4.1 mini', usesMaxCompletionTokens: true },\n\t'openai/gpt-4.1-nano': { displayName: 'GPT 4.1 nano', usesMaxCompletionTokens: true },\n\t'openai/gpt-4.5-preview': { displayName: 'gpt 4.5 preview' },\n\n\t'openai/gpt-oss-120b': { displayName: 'GPT OSS 120B' },\n\t'openai/gpt-oss-20b': { displayName: 'GPT OSS 20B' },\n\n\t'openai/o3-mini': { displayName: 'gpt o3 mini', noSystem: true, usesMaxCompletionTokens: true },\n\t'openai/gpt-4o-audio-preview': { displayName: 'gpt-4o-audio-preview', enabled: false },\n\t'openai/gpt-4o-mini-audio-preview': { displayName: 'gpt-4o-mini-audio-preview', enabled: false },\n\t'openai/gpt-4o-mini-realtime-preview': { displayName: 'gpt-4o-mini-realtime-preview', noChat: true },\n\t'openai/gpt-4o-realtime-preview': { displayName: 'gpt-4o-realtime-preview', noChat: true },\n\t'openai/o1-preview': { displayName: 'o1-preview', noSystem: true, usesMaxCompletionTokens: true },\n\t'openai/o1-mini': { displayName: 'o1-mini', noSystem: true, usesMaxCompletionTokens: true },\n\t'openai/o1': { displayName: 'o1', noSystem: true, enabled: false, usesMaxCompletionTokens: true },\n\t'openai/chatgpt-4o-latest': { displayName: ' ChatGPT GPT-4o' },\n\t'openai/gpt-4o-mini': { displayName: 'GPT-4o mini' },\n\t'openai/gpt-4o': { displayName: ' GPT-4o' },\n\t'openai/gpt-4o-2024-05-13': { displayName: ' GPT-4o (2024-05-13)' },\n\t'openai/gpt-4-turbo': { displayName: 'GPT-4 Turbo with Vision' },\n\t'openai/gpt-4-turbo-2024-04-09': { displayName: 'GPT-4 Turbo with Vision (2024-04-09)' },\n\t'openai/gpt-4-turbo-preview': { displayName: 'GPT-4 Turbo (gpt-4-turbo-preview)' },\n\t'openai/gpt-4-0125-preview': { displayName: 'GPT-4 25-01 (gpt-4-0125-preview)' },\n\t'openai/gpt-4-1106-preview': { displayName: 'GPT-4 06-11 (gpt-4-1106-preview)' },\n\t'openai/gpt-4-vision-preview': { displayName: 'GPT-4 Vision', enabled: false },\n\t'openai/gpt-4-32k': { displayName: 'gpt-4-32k' },\n\t'openai/gpt-4-0613': { displayName: 'gpt-4-0613' },\n\t'openai/gpt-4-32k-0613': { displayName: 'gpt-4-32k-0613' },\n\t'openai/gpt-4': { displayName: 'gpt-4' },\n\t'openai/gpt-4-0314': { displayName: 'gpt-4-0314' },\n\t'openai/gpt-3.5-turbo': { displayName: 'gpt-3.5-turbo' },\n\t'openai/gpt-3.5-turbo-0125': { displayName: 'gpt-3.5-turbo-0125' },\n\t'openai/gpt-3.5-turbo-1106': { displayName: 'gpt-3.5-turbo-1106' },\n\t'openai/gpt-3.5-turbo-instruct': { displayName: 'gpt-3.5-turbo-instruct' },\n\t'openai/gpt-3.5-turbo-16k': { displayName: 'gpt-3.5-turbo-16k' },\n\t'openai/gpt-3.5-turbo-0613': { displayName: 'gpt-3.5-turbo-0613', enabled: false },\n\t'openai/gpt-3.5-turbo-16k-0613': { displayName: 'gpt-3.5-turbo-16k-0613', enabled: false },\n\t'openai/text-davinci-003': { displayName: 'text-davinci-003' },\n\t'openai/text-davinci-002': { displayName: 'text-davinci-002' },\n\n\t/* ---- GOOGLE: ---- */\n\t'google/models/gemini-3-pro-preview': { displayName: 'Gemini 3 Pro', reasoning: true },\n\t'google/models/gemini-2.5-flash': { displayName: 'Gemini 2.5 Flash', reasoning: true },\n\t'google/models/gemini-2.5-flash-lite-preview-06-17': { displayName: 'Gemini 2.5 Flash-Lite Preview 06-17', reasoning: true },\n\t'google/models/gemini-2.5-pro': { displayName: 'Gemini 2.5 Pro', reasoning: true },\n\t'google/models/gemini-2.5-pro-exp-03-25': { displayName: 'Gemini 2.5 Pro Experimental 03-25', reasoning: true },\n\t'google/models/gemini-2.0-flash': { displayName: 'Gemini 2.0 Flash' },\n\t'google/models/gemini-2.0-flash-lite': { displayName: 'Gemini 2.0 Flash-Lite' },\n\t'google/models/gemini-2.0-flash-preview-image-generation': { displayName: 'Gemini 2.0 Flash Preview Image Generation', responseModalities: ['Text', 'Image'] },\n\t'google/models/gemini-2.0-pro-exp-02-05': { displayName: 'Gemini 2.0 Pro Experimental 02-05' },\n\t'google/models/gemini-2.0-flash-thinking-exp-01-21': { displayName: 'Gemini 2.0 Flash Thinking Experimental 01-21' },\n\t'google/models/gemini-2.0-flash-exp': { displayName: 'Gemini 2.0 Flash Experimental', responseModalities: ['Text', 'Image'] },\n\t'google/models/gemini-2.0-flash-thinking-exp-1219': { displayName: 'Gemini 2.0 Flash Thinking Mode' },\n\t'google/models/gemma-3n-e4b-it': { displayName: 'Gemma 3n E4B' },\n\t'google/models/gemma-3n-e2b-it': { displayName: 'Gemma 3n E2B' },\n\t'google/models/gemma-3-27b-it': { displayName: 'Gemma 3 27B' },\n\t'google/models/learnlm-1.5-pro-experimental': { displayName: 'LearnLM 1.5 Pro Experimental' },\n\t'google/models/gemini-exp-1206': { displayName: 'Gemini (exp-1206)' },\n\t'google/models/gemini-1.5-flash-8b': { displayName: 'Gemini 1.5 Flash-8B' },\n\t'google/models/gemini-1.5-pro-002': { displayName: 'Gemini 1.5 Pro 2' },\n\t'google/models/gemini-1.5-flash-002': { displayName: 'Gemini 1.5 Flash 2' },\n\t'google/models/gemini-1.5-flash-latest': { displayName: 'Gemini 1.5 Flash' },\n\t'google/models/gemini-1.5-pro-latest': { displayName: 'Gemini 1.5 Pro' },\n\t'google/models/gemini-1.0-pro-latest': { displayName: 'Gemini 1.0 Pro' },\n\t'google/models/gemini-pro-vision': { displayName: 'Gemini 1.0 Pro Vision' },\n\t'google/models/chat-bison-001': { displayName: 'PaLM 2 Chat (Legacy)' },\n\n\t/* ---- ANTHROPIC: ---- */\n\t'anthropic/claude-haiku-4-5': { displayName: 'Claude Haiku 4.5', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-opus-4-5': { displayName: 'Claude Opus 4.5', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-opus-4-1': { displayName: 'Claude Opus 4.1', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-opus-4-0': { displayName: 'Claude Opus 4', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-sonnet-4-5': { displayName: 'Claude Sonnet 4.5', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-sonnet-4-0': { displayName: 'Claude Sonnet 4', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-7-sonnet-latest': { displayName: 'Claude 3.7 Sonnet', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-5-sonnet-latest': { displayName: 'Claude 3.5 Sonnet v2', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-5-haiku-latest': { displayName: 'Claude 3.5 Haiku', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-haiku-20240307': { displayName: 'Claude 3 Haiku', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-sonnet-20240229': { displayName: 'Claude 3 Sonnet', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-opus-20240229': { displayName: 'Claude 3 Opus', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-2.1': { displayName: 'Claude 2.1' },\n\t'anthropic/claude-instant-1.2': { displayName: 'Claude Instant' },\n\n\t/* ---- AI21: ---- */\n\t'ai21/jamba-large': { displayName: 'Jamba Large', enabled: false },\n\t'ai21/jamba-mini': { displayName: 'Jamba Mini', enabled: false },\n\t'ai21/j2-ultra': { displayName: 'Jurassic-2 Ultra', enabled: false },\n\t'ai21/j2-mid': { displayName: 'Jurassic-2 Mid', enabled: false },\n\t'ai21/j2-light': { displayName: 'Jurassic-2 Light', enabled: false },\n\n\t/* ---- XAI: ---- */\n\t'xai/grok-4': { displayName: 'Grok 4' },\n\t'xai/grok-3-beta': { displayName: 'Grok 3' },\n\t'xai/grok-3-mini-beta': { displayName: 'Grok 3 Mini' },\n\t'xai/grok-3-fast-beta': { displayName: 'Grok 3 Fast' },\n\t'xai/grok-3-mini-fast-beta': { displayName: 'Grok 3 Mini Fast' },\n\t'xai/grok-2-image-1212': { displayName: 'Grok 2 Image Gen', imageGen: true },\n\t'xai/grok-2-vision-1212': { displayName: 'Grok 2 Vision' },\n\t'xai/grok-2-1212': { displayName: 'Grok 2' },\n\t'xai/grok-vision-beta': { displayName: 'Grok Vision' },\n\t'xai/grok-beta': { displayName: 'Grok Beta' },\n\n\t/* ---- DEEPSEEK: ---- */\n\t'deepseek/deepseek-chat': { displayName: 'Deepseek V3 - Chat' },\n\t'deepseek/deepseek-reasoner': { displayName: 'Deepseek R1 - Reasoner' },\n\n\t/* ---- GROQ: ---- */\n\t'groq/moonshotai/kimi-k2-instruct': { displayName: 'kimi-k2-instruct' },\n\t'groq/mistral-saba-24b': { displayName: 'mistral-saba-24b' },\n\t'groq/meta-llama/llama-4-scout-17b-16e-instruct': { displayName: 'Llama 4 Scout', imageInput: true },\n\t'groq/meta-llama/llama-4-maverick-17b-128e-instruct': { displayName: 'Llama 4 Maverick', imageInput: true },\n\t'groq/qwen-qwq-32b': { displayName: 'QwQ-32B', reasoning: true },\n\t'groq/deepseek-r1-distill-llama-70b': { displayName: 'DeepSeek R1 70b (llama)', reasoning: true },\n\t'groq/deepseek-r1-distill-qwen-32b': { displayName: 'DeepSeek R1 32b (qwen)', reasoning: true, enabled: false },\n\t'groq/deepseek-r1-distill-llama-70b-specdec': { displayName: 'DeepSeek R1 70b (llama, specdec)', reasoning: true, enabled: false },\n\t'groq/llama-3.3-70b-versatile': { displayName: 'Llama 3.3 70b Versatile' },\n\t'groq/llama-3.2-90b-vision-preview': { displayName: 'Llama 3.2 90b Vision preview', enabled: false },\n\t'groq/llama-3.3-70b-specdec': { displayName: 'Llama 3.3 70B (SpecDec)', enabled: false },\n\t'groq/llama-3.2-11b-vision-preview': { displayName: 'Llama 3.2 11B Vision Preview', enabled: false },\n\t'groq/llama-3.2-3b-preview': { displayName: 'Llama 3.2 3B Preview', enabled: false },\n\t'groq/llama-3.2-1b-preview': { displayName: 'Llama 3.2 1B Preview', enabled: false },\n\t'groq/llama-3.1-8b-instant': { displayName: 'Llama 3.1 8B' },\n\t'groq/llama3-70b-8192': { displayName: 'LLaMA3 70b' },\n\t'groq/llama3-8b-8192': { displayName: 'LLaMA3 8b' },\n\t'groq/llama-guard-3-8b': { displayName: 'Llama 3 Guard 8b' },\n\t'groq/gemma2-9b-it': { displayName: 'Gemma 2 9b' },\n\t'groq/qwen-2.5-coder-32b': { displayName: 'QwQ-2.5 coder 32b', enabled: false },\n\t'groq/qwen-2.5-32b': { displayName: 'QWEN 2.5 32b', enabled: false },\n\t'groq/mixtral-8x7b-32768': { displayName: 'Mixtral-8x7b' },\n\t'groq/llama-3.1-405b-reasoning': { displayName: 'Llama 3.1 405B', enabled: false },\n\t'groq/llama-3.1-70b-versatile': { displayName: 'Llama 3.1 70B', enabled: false },\n\t'groq/llama2-70b-4096': { displayName: 'LLaMA2 70b', enabled: false },\n\t'groq/gemma-7b-it': { displayName: 'Gemma 7B 8K', enabled: false },\n\n\t/* ---- OPENROUTER: ---- */\n\t'openrouter/qwen/qwen3-coder': { displayName: 'Qwen: Qwen3 Coder' },\n\t'openrouter/qwen/qwen3-235b-a22b-07-25': { displayName: 'Qwen: Qwen3 235B A22B 2507' },\n\t'openrouter/openrouter/optimus-alpha': { displayName: 'Optimus Alpha' },\n\t'openrouter/openrouter/quasar-alpha': { displayName: 'Quasar Alpha', enabled: false },\n\t'openrouter/qwen/qwq-32b': { displayName: 'Qwen: QwQ-32B' },\n\t'openrouter/qwen/qwen-max': { displayName: 'Qwen: Qwen-Max' },\n\t'openrouter/deepseek/deepseek-r1': { displayName: 'DeepSeek: R1 (671B)' },\n\t'openrouter/deepseek/deepseek-chat': { displayName: 'DeepSeek V3' },\n\t'openrouter/meta-llama/llama-3.3-70b-instruct': { displayName: 'Llama 3.3 70B Instruct' },\n\t'openrouter/meta-llama/llama-3.2-90b-vision-instruct': { displayName: 'Llama 3.2 90B Vision model' },\n\t'openrouter/meta-llama/llama-3.2-11b-vision-instruct': { displayName: 'Llama 3.2 11B Vision model' },\n\t'openrouter/mattshumer/reflection-70b': { displayName: 'Reflection 70B' },\n\t'openrouter/meta-llama/llama-3.1-405b-instruct': { displayName: 'Meta: Llama 3.1 405B Instruct' },\n\t'openrouter/meta-llama/llama-3-70b-instruct': { displayName: 'Meta: Llama 3 70B Instruct' },\n\t'openrouter/meta-llama/llama-3-8b-instruct': { displayName: 'Meta: Llama 3 8B Instruct' },\n\t'openrouter/openchat/openchat-7b:free': { displayName: 'Openchat-7b' },\n\t'openrouter/huggingfaceh4/zephyr-7b-beta:free': { displayName: 'HuggingFace: Zephyr 7B' },\n\t'openrouter/openrouter/cinematika-7b:free': { displayName: 'Cinematika 7B' },\n\t'openrouter/mistralai/mistral-7b-instruct:free': { displayName: 'Mistral 7B Instruct' },\n\t'openrouter/nousresearch/nous-capybara-7b:free': { displayName: 'Nous: Capybara 7B' },\n\t'openrouter/google/gemma-7b-it:free': { displayName: 'Google: Gemma 7B' },\n\t'openrouter/mistralai/mixtral-8x7b-instruct': { displayName: 'Mixtral-8x7b-instruct' },\n\t'openrouter/snowflake/snowflake-arctic-instruct': { displayName: 'Snowflake: Arctic Instruct' },\n\t'openrouter/perplexity/sonar-medium-chat': { displayName: 'Perplexity: Sonar 8x7B' },\n\t'openrouter/perplexity/sonar-medium-online': { displayName: 'Perplexity: Sonar 8x7B Online' },\n\n\t/* ---- MISTRAL: ---- */\n\t'mistral/devstral-small-2505': { displayName: 'Devstral Small - free' },\n\t'mistral/codestral-latest': { displayName: 'Codestral' },\n\t'mistral/pixtral-large-latest': { displayName: 'Pixtral Large', imageInput: true },\n\t'mistral/pixtral-12b-2409': { displayName: 'Pixtral - free', imageInput: true },\n\t'mistral/mistral-medium-latest': { displayName: 'Mistral Medium 3' },\n\t'mistral/mistral-saba-latest': { displayName: 'Mistral Saba' },\n\t'mistral/ministral-3b-latest': { displayName: 'Ministral 3B' },\n\t'mistral/ministral-8b-latest': { displayName: 'Ministral 8B' },\n\t'mistral/mistral-small-latest': { displayName: 'Mistral Small - latest - free' },\n\t'mistral/mistral-large-2407': { displayName: 'Mistral Large 2' },\n\t'mistral/mistral-large-latest': { displayName: 'Mistral Large' },\n\t'mistral/open-mistral-7b': { displayName: 'Open Mistral 7b' },\n\t'mistral/open-mixtral-8x7b': { displayName: 'Open Mixtral 8x7b' },\n\t'mistral/mistral-tiny': { displayName: 'Mistral Tiny' },\n\t'mistral/mistral-small': { displayName: 'Mistral Small (old)' },\n\t'mistral/mistral-medium': { displayName: 'Mistral Medium' },\n\n\t/* ---- COHERE: ---- */\n\t'cohere/command-r': { displayName: 'Command-R' },\n\t'cohere/command-r-plus': { displayName: 'Command-R-Plus' },\n\t'cohere/command-light': { displayName: 'Command Light' },\n\t'cohere/c4ai-aya-23': { displayName: 'Aya 23' },\n\n\t/* ---- CLOUDFLARE: ---- */\n\t'cloudflare/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b': { displayName: 'deepseek-r1-distill-qwen-32b' },\n\t'cloudflare/@cf/meta/llama-2-7b-chat-fp16': { displayName: 'llama-2-7b-chat' },\n\t'cloudflare/@hf/meta-llama/meta-llama-3-8b-instruct': { displayName: 'llama-3-8b-instruct' },\n\t'cloudflare/@cf/tinyllama/tinyllama-1.1b-chat-v1.0': { displayName: 'tinyllama-1.1b-chat-v1.0' },\n} satisfies Record<string, ModelInfo>;\n\n// Export type for supported model names\nexport type SupportedModelName = keyof typeof supportedModels;\n\n/**\n * Extract provider name from model string (e.g., \"openai/gpt-4\" -> \"openai\")\n */\nexport function getProviderFromModel(model: string): string | null {\n\tconst parts = model.split('/');\n\treturn parts.length > 1 ? parts[0] : null;\n}\n\n/**\n * Get model information\n */\nexport function getModelInfo(model: string): ModelInfo | undefined {\n\treturn supportedModels[model];\n}\n\n/**\n * List all models for a provider\n */\nexport function listModels(provider?: string): string[] {\n\tconst models = Object.keys(supportedModels);\n\tif (!provider) {\n\t\treturn models;\n\t}\n\treturn models.filter((m) => m.startsWith(`${provider}/`));\n}\n\n/**\n * Check if a model exists\n */\nexport function isModelSupported(model: string): boolean {\n\treturn model in supportedModels;\n}\n\n/**\n * Resolves a model name by searching through the supported models list.\n * Supports partial matching on model keys and display names.\n * @param modelInput - The model name to resolve (can be partial or alias)\n * @returns The full model key (provider/model) or original input if no match found\n */\nexport function resolveModel(modelInput: string): string {\n\tif (!modelInput) return modelInput;\n\n\tconst models = supportedModels;\n\tconst searchTerm = modelInput.toLowerCase().trim();\n\n\t// 1. Check if input is already a valid model key (exact match)\n\tif (models[modelInput]) {\n\t\treturn modelInput;\n\t}\n\n\t// 2. Check for exact match (case-insensitive) in model keys\n\tfor (const [key] of Object.entries(models)) {\n\t\tif (key.toLowerCase() === searchTerm) {\n\t\t\treturn key;\n\t\t}\n\t}\n\n\t// 3. Build list of potential matches with scoring\n\tinterface Match {\n\t\tkey: string;\n\t\tscore: number;\n\t}\n\tconst matches: Match[] = [];\n\n\t// Normalize function to remove hyphens, underscores, dots for flexible matching\n\tconst normalize = (str: string) => str.replace(/[-_.]/g, '').toLowerCase();\n\tconst normalizedSearchTerm = normalize(searchTerm);\n\n\tfor (const [key, model] of Object.entries(models)) {\n\t\tif ('enabled' in model && model.enabled === false) continue; // Skip disabled models\n\n\t\tconst keyLower = key.toLowerCase();\n\t\tconst displayNameLower = (model.displayName || '').toLowerCase();\n\t\tconst modelPart = key.split('/').pop()?.toLowerCase() || '';\n\t\tconst normalizedModelPart = normalize(modelPart);\n\t\tconst normalizedDisplayName = normalize(displayNameLower);\n\n\t\tlet score = 0;\n\n\t\t// Exact match in model part (highest priority)\n\t\tif (modelPart === searchTerm || normalizedModelPart === normalizedSearchTerm) {\n\t\t\tscore = 1000;\n\t\t}\n\t\t// Exact match in display name\n\t\telse if (displayNameLower === searchTerm || normalizedDisplayName === normalizedSearchTerm) {\n\t\t\tscore = 900;\n\t\t}\n\t\t// Model part starts with search term\n\t\telse if (modelPart.startsWith(searchTerm) || normalizedModelPart.startsWith(normalizedSearchTerm)) {\n\t\t\tscore = 800;\n\t\t}\n\t\t// Display name starts with search term\n\t\telse if (displayNameLower.startsWith(searchTerm) || normalizedDisplayName.startsWith(normalizedSearchTerm)) {\n\t\t\tscore = 700;\n\t\t}\n\t\t// Model part contains search term\n\t\telse if (modelPart.includes(searchTerm) || normalizedModelPart.includes(normalizedSearchTerm)) {\n\t\t\tscore = 600;\n\t\t}\n\t\t// Display name contains search term\n\t\telse if (displayNameLower.includes(searchTerm) || normalizedDisplayName.includes(normalizedSearchTerm)) {\n\t\t\tscore = 500;\n\t\t}\n\t\t// Full key contains search term\n\t\telse if (keyLower.includes(searchTerm)) {\n\t\t\tscore = 400;\n\t\t}\n\n\t\tif (score > 0) {\n\t\t\tmatches.push({ key, score });\n\t\t}\n\t}\n\n\t// Sort by score (descending) and return the best match\n\tif (matches.length > 0) {\n\t\tmatches.sort((a, b) => b.score - a.score);\n\t\treturn matches[0].key;\n\t}\n\n\t// 4. No match found, return original input\n\treturn modelInput;\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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","sourcesContent":["import { ModelInfo } from './types';\n\n// Import the supported models data\nexport const supportedModels = {\n\t/* ---- OPENAI: ---- */\n\t'openai/gpt-5.2': { displayName: 'GPT-5.2', usesMaxCompletionTokens: true, reasoning: true, knownIssues: '' },\n\t'openai/gpt-5.1': { displayName: 'GPT-5.1', usesMaxCompletionTokens: true, reasoning: true, knownIssues: '' },\n\t'openai/gpt-5': { displayName: 'GPT-5', usesMaxCompletionTokens: true, reasoning: true, knownIssues: 'Highly unpredictable reasoning token usage (can use 1000+ tokens); recommend 1500+ max_completion_tokens for reliability' },\n\t'openai/gpt-5-mini': { displayName: 'GPT-5 mini', usesMaxCompletionTokens: true, reasoning: true },\n\t'openai/gpt-5-nano': { displayName: 'GPT-5 nano', usesMaxCompletionTokens: true, reasoning: true },\n\t'openai/gpt-5-chat-latest': { displayName: 'GPT-5 Chat', usesMaxCompletionTokens: true },\n\t'openai/gpt-4.1': { displayName: 'GPT 4.1', usesMaxCompletionTokens: true },\n\t'openai/gpt-4.1-mini': { displayName: 'GPT 4.1 mini', usesMaxCompletionTokens: true },\n\t'openai/gpt-4.1-nano': { displayName: 'GPT 4.1 nano', usesMaxCompletionTokens: true },\n\t'openai/gpt-4.5-preview': { displayName: 'gpt 4.5 preview' },\n\n\t'openai/gpt-oss-120b': { displayName: 'GPT OSS 120B' },\n\t'openai/gpt-oss-20b': { displayName: 'GPT OSS 20B' },\n\n\t'openai/o3-mini': { displayName: 'gpt o3 mini', noSystem: true, usesMaxCompletionTokens: true },\n\t'openai/gpt-4o-audio-preview': { displayName: 'gpt-4o-audio-preview', enabled: false },\n\t'openai/gpt-4o-mini-audio-preview': { displayName: 'gpt-4o-mini-audio-preview', enabled: false },\n\t'openai/gpt-4o-mini-realtime-preview': { displayName: 'gpt-4o-mini-realtime-preview', noChat: true },\n\t'openai/gpt-4o-realtime-preview': { displayName: 'gpt-4o-realtime-preview', noChat: true },\n\t'openai/o1-preview': { displayName: 'o1-preview', noSystem: true, usesMaxCompletionTokens: true },\n\t'openai/o1-mini': { displayName: 'o1-mini', noSystem: true, usesMaxCompletionTokens: true },\n\t'openai/o1': { displayName: 'o1', noSystem: true, enabled: false, usesMaxCompletionTokens: true },\n\t'openai/chatgpt-4o-latest': { displayName: ' ChatGPT GPT-4o' },\n\t'openai/gpt-4o-mini': { displayName: 'GPT-4o mini' },\n\t'openai/gpt-4o': { displayName: ' GPT-4o' },\n\t'openai/gpt-4o-2024-05-13': { displayName: ' GPT-4o (2024-05-13)' },\n\t'openai/gpt-4-turbo': { displayName: 'GPT-4 Turbo with Vision' },\n\t'openai/gpt-4-turbo-2024-04-09': { displayName: 'GPT-4 Turbo with Vision (2024-04-09)' },\n\t'openai/gpt-4-turbo-preview': { displayName: 'GPT-4 Turbo (gpt-4-turbo-preview)' },\n\t'openai/gpt-4-0125-preview': { displayName: 'GPT-4 25-01 (gpt-4-0125-preview)' },\n\t'openai/gpt-4-1106-preview': { displayName: 'GPT-4 06-11 (gpt-4-1106-preview)' },\n\t'openai/gpt-4-vision-preview': { displayName: 'GPT-4 Vision', enabled: false },\n\t'openai/gpt-4-32k': { displayName: 'gpt-4-32k' },\n\t'openai/gpt-4-0613': { displayName: 'gpt-4-0613' },\n\t'openai/gpt-4-32k-0613': { displayName: 'gpt-4-32k-0613' },\n\t'openai/gpt-4': { displayName: 'gpt-4' },\n\t'openai/gpt-4-0314': { displayName: 'gpt-4-0314' },\n\t'openai/gpt-3.5-turbo': { displayName: 'gpt-3.5-turbo' },\n\t'openai/gpt-3.5-turbo-0125': { displayName: 'gpt-3.5-turbo-0125' },\n\t'openai/gpt-3.5-turbo-1106': { displayName: 'gpt-3.5-turbo-1106' },\n\t'openai/gpt-3.5-turbo-instruct': { displayName: 'gpt-3.5-turbo-instruct' },\n\t'openai/gpt-3.5-turbo-16k': { displayName: 'gpt-3.5-turbo-16k' },\n\t'openai/gpt-3.5-turbo-0613': { displayName: 'gpt-3.5-turbo-0613', enabled: false },\n\t'openai/gpt-3.5-turbo-16k-0613': { displayName: 'gpt-3.5-turbo-16k-0613', enabled: false },\n\t'openai/text-davinci-003': { displayName: 'text-davinci-003' },\n\t'openai/text-davinci-002': { displayName: 'text-davinci-002' },\n\n\t/* ---- GOOGLE: ---- */\n\t'google/models/gemini-3-pro-image-preview': { displayName: 'Gemini 3 Pro Image', reasoning: true, responseModalities: ['Text', 'Image'] },\n\t'google/models/gemini-3-flash-preview': { displayName: 'Gemini 3 Flash', reasoning: true },\n\t'google/models/gemini-3-pro-preview': { displayName: 'Gemini 3 Pro', reasoning: true },\n\t'google/models/gemini-2.5-flash': { displayName: 'Gemini 2.5 Flash', reasoning: true },\n\t'google/models/gemini-2.5-flash-lite-preview-06-17': { displayName: 'Gemini 2.5 Flash-Lite Preview 06-17', reasoning: true },\n\t'google/models/gemini-2.5-pro': { displayName: 'Gemini 2.5 Pro', reasoning: true },\n\t'google/models/gemini-2.5-pro-exp-03-25': { displayName: 'Gemini 2.5 Pro Experimental 03-25', reasoning: true },\n\t'google/models/gemini-2.0-flash': { displayName: 'Gemini 2.0 Flash' },\n\t'google/models/gemini-2.0-flash-lite': { displayName: 'Gemini 2.0 Flash-Lite' },\n\t'google/models/gemini-2.0-flash-preview-image-generation': { displayName: 'Gemini 2.0 Flash Preview Image Generation', responseModalities: ['Text', 'Image'] },\n\t'google/models/gemini-2.0-pro-exp-02-05': { displayName: 'Gemini 2.0 Pro Experimental 02-05' },\n\t'google/models/gemini-2.0-flash-thinking-exp-01-21': { displayName: 'Gemini 2.0 Flash Thinking Experimental 01-21' },\n\t'google/models/gemini-2.0-flash-exp': { displayName: 'Gemini 2.0 Flash Experimental', responseModalities: ['Text', 'Image'] },\n\t'google/models/gemini-2.0-flash-thinking-exp-1219': { displayName: 'Gemini 2.0 Flash Thinking Mode' },\n\t'google/models/gemma-3n-e4b-it': { displayName: 'Gemma 3n E4B' },\n\t'google/models/gemma-3n-e2b-it': { displayName: 'Gemma 3n E2B' },\n\t'google/models/gemma-3-27b-it': { displayName: 'Gemma 3 27B' },\n\t'google/models/learnlm-1.5-pro-experimental': { displayName: 'LearnLM 1.5 Pro Experimental' },\n\t'google/models/gemini-exp-1206': { displayName: 'Gemini (exp-1206)' },\n\t'google/models/gemini-1.5-flash-8b': { displayName: 'Gemini 1.5 Flash-8B' },\n\t'google/models/gemini-1.5-pro-002': { displayName: 'Gemini 1.5 Pro 2' },\n\t'google/models/gemini-1.5-flash-002': { displayName: 'Gemini 1.5 Flash 2' },\n\t'google/models/gemini-1.5-flash-latest': { displayName: 'Gemini 1.5 Flash' },\n\t'google/models/gemini-1.5-pro-latest': { displayName: 'Gemini 1.5 Pro' },\n\t'google/models/gemini-1.0-pro-latest': { displayName: 'Gemini 1.0 Pro' },\n\t'google/models/gemini-pro-vision': { displayName: 'Gemini 1.0 Pro Vision' },\n\t'google/models/chat-bison-001': { displayName: 'PaLM 2 Chat (Legacy)' },\n\n\t/* ---- ANTHROPIC: ---- */\n\t'anthropic/claude-haiku-4-5': { displayName: 'Claude Haiku 4.5', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-opus-4-5': { displayName: 'Claude Opus 4.5', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-opus-4-1': { displayName: 'Claude Opus 4.1', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-opus-4-0': { displayName: 'Claude Opus 4', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-sonnet-4-5': { displayName: 'Claude Sonnet 4.5', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-sonnet-4-0': { displayName: 'Claude Sonnet 4', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-7-sonnet-latest': { displayName: 'Claude 3.7 Sonnet', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-5-sonnet-latest': { displayName: 'Claude 3.5 Sonnet v2', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-5-haiku-latest': { displayName: 'Claude 3.5 Haiku', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-haiku-20240307': { displayName: 'Claude 3 Haiku', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-sonnet-20240229': { displayName: 'Claude 3 Sonnet', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-3-opus-20240229': { displayName: 'Claude 3 Opus', url: 'https://api.anthropic.com/v1/messages' },\n\t'anthropic/claude-2.1': { displayName: 'Claude 2.1' },\n\t'anthropic/claude-instant-1.2': { displayName: 'Claude Instant' },\n\n\t/* ---- AI21: ---- */\n\t'ai21/jamba-large': { displayName: 'Jamba Large', enabled: false },\n\t'ai21/jamba-mini': { displayName: 'Jamba Mini', enabled: false },\n\t'ai21/j2-ultra': { displayName: 'Jurassic-2 Ultra', enabled: false },\n\t'ai21/j2-mid': { displayName: 'Jurassic-2 Mid', enabled: false },\n\t'ai21/j2-light': { displayName: 'Jurassic-2 Light', enabled: false },\n\n\t/* ---- XAI: ---- */\n\t'xai/grok-4': { displayName: 'Grok 4' },\n\t'xai/grok-3-beta': { displayName: 'Grok 3' },\n\t'xai/grok-3-mini-beta': { displayName: 'Grok 3 Mini' },\n\t'xai/grok-3-fast-beta': { displayName: 'Grok 3 Fast' },\n\t'xai/grok-3-mini-fast-beta': { displayName: 'Grok 3 Mini Fast' },\n\t'xai/grok-2-image-1212': { displayName: 'Grok 2 Image Gen', imageGen: true },\n\t'xai/grok-2-vision-1212': { displayName: 'Grok 2 Vision' },\n\t'xai/grok-2-1212': { displayName: 'Grok 2' },\n\t'xai/grok-vision-beta': { displayName: 'Grok Vision' },\n\t'xai/grok-beta': { displayName: 'Grok Beta' },\n\n\t/* ---- DEEPSEEK: ---- */\n\t'deepseek/deepseek-chat': { displayName: 'Deepseek V3 - Chat' },\n\t'deepseek/deepseek-reasoner': { displayName: 'Deepseek R1 - Reasoner' },\n\n\t/* ---- GROQ: ---- */\n\t'groq/moonshotai/kimi-k2-instruct': { displayName: 'kimi-k2-instruct' },\n\t'groq/mistral-saba-24b': { displayName: 'mistral-saba-24b' },\n\t'groq/meta-llama/llama-4-scout-17b-16e-instruct': { displayName: 'Llama 4 Scout', imageInput: true },\n\t'groq/meta-llama/llama-4-maverick-17b-128e-instruct': { displayName: 'Llama 4 Maverick', imageInput: true },\n\t'groq/qwen-qwq-32b': { displayName: 'QwQ-32B', reasoning: true },\n\t'groq/deepseek-r1-distill-llama-70b': { displayName: 'DeepSeek R1 70b (llama)', reasoning: true },\n\t'groq/deepseek-r1-distill-qwen-32b': { displayName: 'DeepSeek R1 32b (qwen)', reasoning: true, enabled: false },\n\t'groq/deepseek-r1-distill-llama-70b-specdec': { displayName: 'DeepSeek R1 70b (llama, specdec)', reasoning: true, enabled: false },\n\t'groq/llama-3.3-70b-versatile': { displayName: 'Llama 3.3 70b Versatile' },\n\t'groq/llama-3.2-90b-vision-preview': { displayName: 'Llama 3.2 90b Vision preview', enabled: false },\n\t'groq/llama-3.3-70b-specdec': { displayName: 'Llama 3.3 70B (SpecDec)', enabled: false },\n\t'groq/llama-3.2-11b-vision-preview': { displayName: 'Llama 3.2 11B Vision Preview', enabled: false },\n\t'groq/llama-3.2-3b-preview': { displayName: 'Llama 3.2 3B Preview', enabled: false },\n\t'groq/llama-3.2-1b-preview': { displayName: 'Llama 3.2 1B Preview', enabled: false },\n\t'groq/llama-3.1-8b-instant': { displayName: 'Llama 3.1 8B' },\n\t'groq/llama3-70b-8192': { displayName: 'LLaMA3 70b' },\n\t'groq/llama3-8b-8192': { displayName: 'LLaMA3 8b' },\n\t'groq/llama-guard-3-8b': { displayName: 'Llama 3 Guard 8b' },\n\t'groq/gemma2-9b-it': { displayName: 'Gemma 2 9b' },\n\t'groq/qwen-2.5-coder-32b': { displayName: 'QwQ-2.5 coder 32b', enabled: false },\n\t'groq/qwen-2.5-32b': { displayName: 'QWEN 2.5 32b', enabled: false },\n\t'groq/mixtral-8x7b-32768': { displayName: 'Mixtral-8x7b' },\n\t'groq/llama-3.1-405b-reasoning': { displayName: 'Llama 3.1 405B', enabled: false },\n\t'groq/llama-3.1-70b-versatile': { displayName: 'Llama 3.1 70B', enabled: false },\n\t'groq/llama2-70b-4096': { displayName: 'LLaMA2 70b', enabled: false },\n\t'groq/gemma-7b-it': { displayName: 'Gemma 7B 8K', enabled: false },\n\n\t/* ---- OPENROUTER: ---- */\n\t'openrouter/qwen/qwen3-coder': { displayName: 'Qwen: Qwen3 Coder' },\n\t'openrouter/qwen/qwen3-235b-a22b-07-25': { displayName: 'Qwen: Qwen3 235B A22B 2507' },\n\t'openrouter/openrouter/optimus-alpha': { displayName: 'Optimus Alpha' },\n\t'openrouter/openrouter/quasar-alpha': { displayName: 'Quasar Alpha', enabled: false },\n\t'openrouter/qwen/qwq-32b': { displayName: 'Qwen: QwQ-32B' },\n\t'openrouter/qwen/qwen-max': { displayName: 'Qwen: Qwen-Max' },\n\t'openrouter/deepseek/deepseek-r1': { displayName: 'DeepSeek: R1 (671B)' },\n\t'openrouter/deepseek/deepseek-chat': { displayName: 'DeepSeek V3' },\n\t'openrouter/meta-llama/llama-3.3-70b-instruct': { displayName: 'Llama 3.3 70B Instruct' },\n\t'openrouter/meta-llama/llama-3.2-90b-vision-instruct': { displayName: 'Llama 3.2 90B Vision model' },\n\t'openrouter/meta-llama/llama-3.2-11b-vision-instruct': { displayName: 'Llama 3.2 11B Vision model' },\n\t'openrouter/mattshumer/reflection-70b': { displayName: 'Reflection 70B' },\n\t'openrouter/meta-llama/llama-3.1-405b-instruct': { displayName: 'Meta: Llama 3.1 405B Instruct' },\n\t'openrouter/meta-llama/llama-3-70b-instruct': { displayName: 'Meta: Llama 3 70B Instruct' },\n\t'openrouter/meta-llama/llama-3-8b-instruct': { displayName: 'Meta: Llama 3 8B Instruct' },\n\t'openrouter/openchat/openchat-7b:free': { displayName: 'Openchat-7b' },\n\t'openrouter/huggingfaceh4/zephyr-7b-beta:free': { displayName: 'HuggingFace: Zephyr 7B' },\n\t'openrouter/openrouter/cinematika-7b:free': { displayName: 'Cinematika 7B' },\n\t'openrouter/mistralai/mistral-7b-instruct:free': { displayName: 'Mistral 7B Instruct' },\n\t'openrouter/nousresearch/nous-capybara-7b:free': { displayName: 'Nous: Capybara 7B' },\n\t'openrouter/google/gemma-7b-it:free': { displayName: 'Google: Gemma 7B' },\n\t'openrouter/mistralai/mixtral-8x7b-instruct': { displayName: 'Mixtral-8x7b-instruct' },\n\t'openrouter/snowflake/snowflake-arctic-instruct': { displayName: 'Snowflake: Arctic Instruct' },\n\t'openrouter/perplexity/sonar-medium-chat': { displayName: 'Perplexity: Sonar 8x7B' },\n\t'openrouter/perplexity/sonar-medium-online': { displayName: 'Perplexity: Sonar 8x7B Online' },\n\n\t/* ---- MISTRAL: ---- */\n\t'mistral/devstral-small-2505': { displayName: 'Devstral Small - free' },\n\t'mistral/codestral-latest': { displayName: 'Codestral' },\n\t'mistral/pixtral-large-latest': { displayName: 'Pixtral Large', imageInput: true },\n\t'mistral/pixtral-12b-2409': { displayName: 'Pixtral - free', imageInput: true },\n\t'mistral/mistral-medium-latest': { displayName: 'Mistral Medium 3' },\n\t'mistral/mistral-saba-latest': { displayName: 'Mistral Saba' },\n\t'mistral/ministral-3b-latest': { displayName: 'Ministral 3B' },\n\t'mistral/ministral-8b-latest': { displayName: 'Ministral 8B' },\n\t'mistral/mistral-small-latest': { displayName: 'Mistral Small - latest - free' },\n\t'mistral/mistral-large-2407': { displayName: 'Mistral Large 2' },\n\t'mistral/mistral-large-latest': { displayName: 'Mistral Large' },\n\t'mistral/open-mistral-7b': { displayName: 'Open Mistral 7b' },\n\t'mistral/open-mixtral-8x7b': { displayName: 'Open Mixtral 8x7b' },\n\t'mistral/mistral-tiny': { displayName: 'Mistral Tiny' },\n\t'mistral/mistral-small': { displayName: 'Mistral Small (old)' },\n\t'mistral/mistral-medium': { displayName: 'Mistral Medium' },\n\n\t/* ---- COHERE: ---- */\n\t'cohere/command-r': { displayName: 'Command-R' },\n\t'cohere/command-r-plus': { displayName: 'Command-R-Plus' },\n\t'cohere/command-light': { displayName: 'Command Light' },\n\t'cohere/c4ai-aya-23': { displayName: 'Aya 23' },\n\n\t/* ---- CLOUDFLARE: ---- */\n\t'cloudflare/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b': { displayName: 'deepseek-r1-distill-qwen-32b' },\n\t'cloudflare/@cf/meta/llama-2-7b-chat-fp16': { displayName: 'llama-2-7b-chat' },\n\t'cloudflare/@hf/meta-llama/meta-llama-3-8b-instruct': { displayName: 'llama-3-8b-instruct' },\n\t'cloudflare/@cf/tinyllama/tinyllama-1.1b-chat-v1.0': { displayName: 'tinyllama-1.1b-chat-v1.0' },\n} satisfies Record<string, ModelInfo>;\n\n// Export type for supported model names\nexport type SupportedModelName = keyof typeof supportedModels;\n\n/**\n * Extract provider name from model string (e.g., \"openai/gpt-4\" -> \"openai\")\n */\nexport function getProviderFromModel(model: string): string | null {\n\tconst parts = model.split('/');\n\treturn parts.length > 1 ? parts[0] : null;\n}\n\n/**\n * Get model information\n */\nexport function getModelInfo(model: string): ModelInfo | undefined {\n\treturn supportedModels[model];\n}\n\n/**\n * List all models for a provider\n */\nexport function listModels(provider?: string): string[] {\n\tconst models = Object.keys(supportedModels);\n\tif (!provider) {\n\t\treturn models;\n\t}\n\treturn models.filter((m) => m.startsWith(`${provider}/`));\n}\n\n/**\n * Check if a model exists\n */\nexport function isModelSupported(model: string): boolean {\n\treturn model in supportedModels;\n}\n\n/**\n * Resolves a model name by searching through the supported models list.\n * Supports partial matching on model keys and display names.\n * @param modelInput - The model name to resolve (can be partial or alias)\n * @returns The full model key (provider/model) or original input if no match found\n */\nexport function resolveModel(modelInput: string): string {\n\tif (!modelInput) return modelInput;\n\n\tconst models = supportedModels;\n\tconst searchTerm = modelInput.toLowerCase().trim();\n\n\t// 1. Check if input is already a valid model key (exact match)\n\tif (models[modelInput]) {\n\t\treturn modelInput;\n\t}\n\n\t// 2. Check for exact match (case-insensitive) in model keys\n\tfor (const [key] of Object.entries(models)) {\n\t\tif (key.toLowerCase() === searchTerm) {\n\t\t\treturn key;\n\t\t}\n\t}\n\n\t// 3. Build list of potential matches with scoring\n\tinterface Match {\n\t\tkey: string;\n\t\tscore: number;\n\t}\n\tconst matches: Match[] = [];\n\n\t// Normalize function to remove hyphens, underscores, dots for flexible matching\n\tconst normalize = (str: string) => str.replace(/[-_.]/g, '').toLowerCase();\n\tconst normalizedSearchTerm = normalize(searchTerm);\n\n\tfor (const [key, model] of Object.entries(models)) {\n\t\tif ('enabled' in model && model.enabled === false) continue; // Skip disabled models\n\n\t\tconst keyLower = key.toLowerCase();\n\t\tconst displayNameLower = (model.displayName || '').toLowerCase();\n\t\tconst modelPart = key.split('/').pop()?.toLowerCase() || '';\n\t\tconst normalizedModelPart = normalize(modelPart);\n\t\tconst normalizedDisplayName = normalize(displayNameLower);\n\n\t\tlet score = 0;\n\n\t\t// Exact match in model part (highest priority)\n\t\tif (modelPart === searchTerm || normalizedModelPart === normalizedSearchTerm) {\n\t\t\tscore = 1000;\n\t\t}\n\t\t// Exact match in display name\n\t\telse if (displayNameLower === searchTerm || normalizedDisplayName === normalizedSearchTerm) {\n\t\t\tscore = 900;\n\t\t}\n\t\t// Model part starts with search term\n\t\telse if (modelPart.startsWith(searchTerm) || normalizedModelPart.startsWith(normalizedSearchTerm)) {\n\t\t\tscore = 800;\n\t\t}\n\t\t// Display name starts with search term\n\t\telse if (displayNameLower.startsWith(searchTerm) || normalizedDisplayName.startsWith(normalizedSearchTerm)) {\n\t\t\tscore = 700;\n\t\t}\n\t\t// Model part contains search term\n\t\telse if (modelPart.includes(searchTerm) || normalizedModelPart.includes(normalizedSearchTerm)) {\n\t\t\tscore = 600;\n\t\t}\n\t\t// Display name contains search term\n\t\telse if (displayNameLower.includes(searchTerm) || normalizedDisplayName.includes(normalizedSearchTerm)) {\n\t\t\tscore = 500;\n\t\t}\n\t\t// Full key contains search term\n\t\telse if (keyLower.includes(searchTerm)) {\n\t\t\tscore = 400;\n\t\t}\n\n\t\tif (score > 0) {\n\t\t\tmatches.push({ key, score });\n\t\t}\n\t}\n\n\t// Sort by score (descending) and return the best match\n\tif (matches.length > 0) {\n\t\tmatches.sort((a, b) => b.score - a.score);\n\t\treturn matches[0].key;\n\t}\n\n\t// 4. No match found, return original input\n\treturn modelInput;\n}\n\n"]}
|
package/package.json
CHANGED
package/src/adapters/google.ts
CHANGED
|
@@ -472,82 +472,125 @@ export class GoogleAdapter extends BaseAdapter {
|
|
|
472
472
|
}
|
|
473
473
|
|
|
474
474
|
const accumulatedToolCalls: GoogleFunctionCall[] = [];
|
|
475
|
-
let buffer = ''; // Buffer for incomplete JSON chunks
|
|
476
475
|
|
|
477
|
-
|
|
478
|
-
|
|
476
|
+
// Google returns streaming response as a JSON array with objects sent progressively
|
|
477
|
+
// Format: [{ obj1 }, { obj2 }, ... { objN }]
|
|
478
|
+
// We need to parse each complete JSON object as it arrives and yield immediately
|
|
479
|
+
const reader = response.body.getReader();
|
|
480
|
+
const decoder = new TextDecoder();
|
|
481
|
+
let buffer = '';
|
|
482
|
+
let depth = 0;
|
|
483
|
+
let inString = false;
|
|
484
|
+
let escapeNext = false;
|
|
485
|
+
let objectStart = -1;
|
|
479
486
|
|
|
480
|
-
|
|
481
|
-
|
|
487
|
+
try {
|
|
488
|
+
while (true) {
|
|
489
|
+
const { done, value } = await reader.read();
|
|
482
490
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
buffer = ''; // Clear buffer on success
|
|
491
|
+
if (done) {
|
|
492
|
+
break;
|
|
493
|
+
}
|
|
487
494
|
|
|
488
|
-
|
|
495
|
+
buffer += decoder.decode(value, { stream: true });
|
|
489
496
|
|
|
490
|
-
|
|
497
|
+
// Parse JSON objects as they become complete in the buffer
|
|
498
|
+
let i = 0;
|
|
499
|
+
while (i < buffer.length) {
|
|
500
|
+
const char = buffer[i];
|
|
491
501
|
|
|
492
|
-
|
|
493
|
-
|
|
502
|
+
if (escapeNext) {
|
|
503
|
+
escapeNext = false;
|
|
504
|
+
i++;
|
|
505
|
+
continue;
|
|
506
|
+
}
|
|
494
507
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
}
|
|
501
|
-
});
|
|
502
|
-
}
|
|
508
|
+
if (char === '\\' && inString) {
|
|
509
|
+
escapeNext = true;
|
|
510
|
+
i++;
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
503
513
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
content,
|
|
507
|
-
finishReason,
|
|
508
|
-
};
|
|
509
|
-
|
|
510
|
-
// Include tool calls on finish
|
|
511
|
-
if (finishReason && accumulatedToolCalls.length > 0) {
|
|
512
|
-
streamChunk.toolCalls = accumulatedToolCalls.map((fc, i) => ({
|
|
513
|
-
id: `call_${Date.now()}_${i}`,
|
|
514
|
-
type: 'function' as const,
|
|
515
|
-
function: {
|
|
516
|
-
name: fc.name,
|
|
517
|
-
arguments: JSON.stringify(fc.args),
|
|
518
|
-
},
|
|
519
|
-
}));
|
|
514
|
+
if (char === '"') {
|
|
515
|
+
inString = !inString;
|
|
520
516
|
}
|
|
521
517
|
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
518
|
+
if (!inString) {
|
|
519
|
+
if (char === '{') {
|
|
520
|
+
if (depth === 0) {
|
|
521
|
+
objectStart = i;
|
|
522
|
+
}
|
|
523
|
+
depth++;
|
|
524
|
+
} else if (char === '}') {
|
|
525
|
+
depth--;
|
|
526
|
+
if (depth === 0 && objectStart >= 0) {
|
|
527
|
+
// Complete JSON object found
|
|
528
|
+
const jsonStr = buffer.substring(objectStart, i + 1);
|
|
529
|
+
try {
|
|
530
|
+
const chunk = JSON.parse(jsonStr);
|
|
531
|
+
const candidate = chunk.candidates?.[0];
|
|
532
|
+
|
|
533
|
+
if (candidate) {
|
|
534
|
+
const content = this.extractContentText(candidate.content);
|
|
535
|
+
const finishReason = candidate.finishReason;
|
|
536
|
+
|
|
537
|
+
// Accumulate tool calls
|
|
538
|
+
if (candidate.content?.parts) {
|
|
539
|
+
candidate.content.parts.forEach((part: GooglePart) => {
|
|
540
|
+
if (part.functionCall) {
|
|
541
|
+
accumulatedToolCalls.push(part.functionCall);
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
if (content || finishReason) {
|
|
547
|
+
const streamChunk: StreamChunk = {
|
|
548
|
+
content,
|
|
549
|
+
finishReason,
|
|
550
|
+
};
|
|
551
|
+
|
|
552
|
+
// Include tool calls on finish
|
|
553
|
+
if (finishReason && accumulatedToolCalls.length > 0) {
|
|
554
|
+
streamChunk.toolCalls = accumulatedToolCalls.map((fc, idx) => ({
|
|
555
|
+
id: `call_${Date.now()}_${idx}`,
|
|
556
|
+
type: 'function' as const,
|
|
557
|
+
function: {
|
|
558
|
+
name: fc.name,
|
|
559
|
+
arguments: JSON.stringify(fc.args),
|
|
560
|
+
},
|
|
561
|
+
}));
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
yield streamChunk;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
} catch (e) {
|
|
568
|
+
// Invalid JSON object, skip
|
|
569
|
+
console.warn('Failed to parse chunk:', jsonStr.substring(0, 100));
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// Remove parsed object from buffer
|
|
573
|
+
buffer = buffer.substring(i + 1);
|
|
574
|
+
i = 0;
|
|
575
|
+
objectStart = -1;
|
|
576
|
+
continue;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
i++;
|
|
531
582
|
}
|
|
532
|
-
continue;
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
583
|
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
const content = this.extractContentText(candidate.content);
|
|
543
|
-
const finishReason = candidate.finishReason;
|
|
544
|
-
if (content || finishReason) {
|
|
545
|
-
yield { content, finishReason };
|
|
546
|
-
}
|
|
584
|
+
// Keep unparsed data in buffer for next iteration
|
|
585
|
+
if (objectStart >= 0) {
|
|
586
|
+
buffer = buffer.substring(objectStart);
|
|
587
|
+
} else {
|
|
588
|
+
// No partial object, clear buffer of array markers and commas
|
|
589
|
+
buffer = buffer.replace(/^[\[\],\s]+/, '');
|
|
547
590
|
}
|
|
548
|
-
} catch (e) {
|
|
549
|
-
// Final buffer content was invalid, skip
|
|
550
591
|
}
|
|
592
|
+
} finally {
|
|
593
|
+
reader.releaseLock();
|
|
551
594
|
}
|
|
552
595
|
}
|
|
553
596
|
|
package/src/models.ts
CHANGED
|
@@ -51,6 +51,8 @@ export const supportedModels = {
|
|
|
51
51
|
'openai/text-davinci-002': { displayName: 'text-davinci-002' },
|
|
52
52
|
|
|
53
53
|
/* ---- GOOGLE: ---- */
|
|
54
|
+
'google/models/gemini-3-pro-image-preview': { displayName: 'Gemini 3 Pro Image', reasoning: true, responseModalities: ['Text', 'Image'] },
|
|
55
|
+
'google/models/gemini-3-flash-preview': { displayName: 'Gemini 3 Flash', reasoning: true },
|
|
54
56
|
'google/models/gemini-3-pro-preview': { displayName: 'Gemini 3 Pro', reasoning: true },
|
|
55
57
|
'google/models/gemini-2.5-flash': { displayName: 'Gemini 2.5 Flash', reasoning: true },
|
|
56
58
|
'google/models/gemini-2.5-flash-lite-preview-06-17': { displayName: 'Gemini 2.5 Flash-Lite Preview 06-17', reasoning: true },
|