@node-llm/core 1.15.2 → 1.16.0
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/aliases.d.ts +315 -26
- package/dist/aliases.d.ts.map +1 -1
- package/dist/aliases.js +334 -45
- package/dist/chat/Chat.d.ts +22 -2
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +45 -3
- package/dist/chat/ChatOptions.d.ts +3 -1
- package/dist/chat/ChatOptions.d.ts.map +1 -1
- package/dist/chat/ChatResponse.d.ts +8 -2
- package/dist/chat/ChatResponse.d.ts.map +1 -1
- package/dist/chat/ChatResponse.js +9 -3
- package/dist/chat/ChatStream.d.ts.map +1 -1
- package/dist/chat/ChatStream.js +2 -0
- package/dist/chat/Tool.d.ts.map +1 -1
- package/dist/chat/Tool.js +21 -11
- package/dist/chat/ToolHandler.d.ts.map +1 -1
- package/dist/chat/ToolHandler.js +9 -2
- package/dist/chat/Validation.d.ts +1 -0
- package/dist/chat/Validation.d.ts.map +1 -1
- package/dist/chat/Validation.js +10 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/llm.d.ts +4 -0
- package/dist/llm.d.ts.map +1 -1
- package/dist/models/ModelRegistry.d.ts +3 -0
- package/dist/models/ModelRegistry.d.ts.map +1 -1
- package/dist/models/ModelRegistry.js +53 -16
- package/dist/models/PricingRegistry.d.ts.map +1 -1
- package/dist/models/PricingRegistry.js +14 -0
- package/dist/models/models.json +15118 -8614
- package/dist/providers/BaseProvider.d.ts.map +1 -1
- package/dist/providers/BaseProvider.js +1 -0
- package/dist/providers/Provider.d.ts +33 -0
- package/dist/providers/Provider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.js +1 -1
- package/dist/providers/anthropic/Capabilities.d.ts +1 -0
- package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
- package/dist/providers/anthropic/Capabilities.js +15 -34
- package/dist/providers/anthropic/Chat.d.ts.map +1 -1
- package/dist/providers/anthropic/Chat.js +16 -2
- package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
- package/dist/providers/anthropic/Streaming.js +15 -1
- package/dist/providers/bedrock/BedrockProvider.d.ts +1 -1
- package/dist/providers/bedrock/BedrockProvider.js +1 -1
- package/dist/providers/bedrock/Capabilities.d.ts +3 -28
- package/dist/providers/bedrock/Capabilities.d.ts.map +1 -1
- package/dist/providers/bedrock/Capabilities.js +62 -183
- package/dist/providers/bedrock/Chat.d.ts.map +1 -1
- package/dist/providers/bedrock/Chat.js +1 -0
- package/dist/providers/bedrock/Streaming.d.ts.map +1 -1
- package/dist/providers/bedrock/Streaming.js +1 -0
- package/dist/providers/bedrock/mapper.d.ts +4 -3
- package/dist/providers/bedrock/mapper.d.ts.map +1 -1
- package/dist/providers/bedrock/mapper.js +19 -4
- package/dist/providers/deepseek/Capabilities.d.ts +2 -1
- package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
- package/dist/providers/deepseek/Capabilities.js +21 -30
- package/dist/providers/deepseek/DeepSeekProvider.d.ts +1 -1
- package/dist/providers/gemini/Capabilities.d.ts +1 -1
- package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
- package/dist/providers/gemini/Capabilities.js +33 -87
- package/dist/providers/gemini/Chat.d.ts.map +1 -1
- package/dist/providers/gemini/Chat.js +44 -9
- package/dist/providers/gemini/ChatUtils.d.ts.map +1 -1
- package/dist/providers/gemini/ChatUtils.js +59 -49
- package/dist/providers/gemini/GeminiProvider.js +1 -1
- package/dist/providers/gemini/Image.d.ts.map +1 -1
- package/dist/providers/gemini/Image.js +17 -5
- package/dist/providers/gemini/Streaming.d.ts.map +1 -1
- package/dist/providers/gemini/Streaming.js +41 -1
- package/dist/providers/gemini/types.d.ts +1 -0
- package/dist/providers/gemini/types.d.ts.map +1 -1
- package/dist/providers/mistral/Capabilities.d.ts +1 -0
- package/dist/providers/mistral/Capabilities.d.ts.map +1 -1
- package/dist/providers/mistral/Capabilities.js +30 -59
- package/dist/providers/mistral/Chat.d.ts.map +1 -1
- package/dist/providers/mistral/Chat.js +13 -1
- package/dist/providers/mistral/Streaming.d.ts.map +1 -1
- package/dist/providers/mistral/Streaming.js +13 -1
- package/dist/providers/mistral/Transcription.d.ts.map +1 -1
- package/dist/providers/mistral/Transcription.js +3 -1
- package/dist/providers/ollama/Capabilities.d.ts +1 -0
- package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
- package/dist/providers/ollama/Capabilities.js +17 -27
- package/dist/providers/openai/Capabilities.d.ts +2 -1
- package/dist/providers/openai/Capabilities.d.ts.map +1 -1
- package/dist/providers/openai/Capabilities.js +35 -71
- package/dist/providers/openai/Chat.d.ts.map +1 -1
- package/dist/providers/openai/Chat.js +4 -1
- package/dist/providers/openai/Image.d.ts +1 -0
- package/dist/providers/openai/Image.d.ts.map +1 -1
- package/dist/providers/openai/Image.js +61 -2
- package/dist/providers/openai/Streaming.d.ts.map +1 -1
- package/dist/providers/openai/Streaming.js +7 -1
- package/dist/providers/openai/Transcription.d.ts.map +1 -1
- package/dist/providers/openai/Transcription.js +7 -2
- package/dist/providers/openrouter/Capabilities.d.ts +10 -9
- package/dist/providers/openrouter/Capabilities.d.ts.map +1 -1
- package/dist/providers/openrouter/Capabilities.js +25 -48
- package/dist/providers/utils.d.ts +4 -0
- package/dist/providers/utils.d.ts.map +1 -1
- package/dist/providers/utils.js +11 -0
- package/dist/providers/xai/Capabilities.d.ts +13 -9
- package/dist/providers/xai/Capabilities.d.ts.map +1 -1
- package/dist/providers/xai/Capabilities.js +34 -65
- package/dist/transcription/Transcription.d.ts +23 -1
- package/dist/transcription/Transcription.d.ts.map +1 -1
- package/dist/transcription/Transcription.js +22 -0
- package/dist/utils/Binary.d.ts +8 -0
- package/dist/utils/Binary.d.ts.map +1 -1
- package/dist/utils/Binary.js +12 -0
- package/package.json +1 -1
|
@@ -2,141 +2,87 @@ import { ModelRegistry } from "../../models/ModelRegistry.js";
|
|
|
2
2
|
import { PricingRegistry } from "../../models/PricingRegistry.js";
|
|
3
3
|
export class Capabilities {
|
|
4
4
|
static getContextWindow(modelId) {
|
|
5
|
-
|
|
6
|
-
if (val !== undefined && val !== null)
|
|
7
|
-
return val;
|
|
8
|
-
const id = this.normalizeModelId(modelId);
|
|
9
|
-
if (id.match(/gemini-2\.5-pro-exp-03-25|gemini-2\.0-flash|gemini-2\.0-flash-lite|gemini-1\.5-flash|gemini-1\.5-flash-8b/)) {
|
|
10
|
-
return 1_048_576;
|
|
11
|
-
}
|
|
12
|
-
if (id.match(/gemini-1\.5-pro/)) {
|
|
13
|
-
return 2_097_152;
|
|
14
|
-
}
|
|
15
|
-
if (id.match(/gemini-embedding-exp/)) {
|
|
16
|
-
return 8_192;
|
|
17
|
-
}
|
|
18
|
-
if (id.match(/text-embedding-004|embedding-001/)) {
|
|
19
|
-
return 2_048;
|
|
20
|
-
}
|
|
21
|
-
if (id.match(/aqa/)) {
|
|
22
|
-
return 7_168;
|
|
23
|
-
}
|
|
24
|
-
return 32_768;
|
|
5
|
+
return ModelRegistry.getContextWindow(modelId, "gemini") ?? 32_768;
|
|
25
6
|
}
|
|
26
7
|
static getMaxOutputTokens(modelId) {
|
|
27
|
-
|
|
28
|
-
if (val !== undefined && val !== null)
|
|
29
|
-
return val;
|
|
30
|
-
const id = this.normalizeModelId(modelId);
|
|
31
|
-
if (id.match(/gemini-2\.5-pro-exp-03-25/)) {
|
|
32
|
-
return 64_000;
|
|
33
|
-
}
|
|
34
|
-
if (id.match(/gemini-2\.0-flash|gemini-2\.0-flash-lite|gemini-1\.5-flash|gemini-1\.5-flash-8b|gemini-1\.5-pro/)) {
|
|
35
|
-
return 8_192;
|
|
36
|
-
}
|
|
37
|
-
if (id.match(/text-embedding-004|embedding-001/)) {
|
|
38
|
-
return 768;
|
|
39
|
-
}
|
|
40
|
-
if (id.match(/imagen-3/)) {
|
|
41
|
-
return 4;
|
|
42
|
-
}
|
|
43
|
-
return 4_096;
|
|
8
|
+
return ModelRegistry.getMaxOutputTokens(modelId, "gemini") ?? 4_096;
|
|
44
9
|
}
|
|
45
10
|
static supportsVision(modelId) {
|
|
46
|
-
|
|
47
|
-
if (model?.modalities?.input?.includes("image"))
|
|
48
|
-
return true;
|
|
49
|
-
const id = this.normalizeModelId(modelId);
|
|
50
|
-
if (id.match(/text-embedding|embedding-001|aqa/)) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
return !!id.match(/gemini|flash|pro|imagen/);
|
|
11
|
+
return ModelRegistry.supports(modelId, "vision", "gemini");
|
|
54
12
|
}
|
|
55
13
|
static supportsTools(modelId) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return true;
|
|
59
|
-
const id = this.normalizeModelId(modelId);
|
|
60
|
-
if (id.match(/text-embedding|embedding-001|aqa|flash-lite|imagen|gemini-2\.0-flash-lite/)) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
return !!id.match(/gemini|pro|flash/);
|
|
14
|
+
return (ModelRegistry.supports(modelId, "tools", "gemini") ||
|
|
15
|
+
ModelRegistry.supports(modelId, "function_calling", "gemini"));
|
|
64
16
|
}
|
|
65
17
|
static supportsStructuredOutput(modelId) {
|
|
66
|
-
|
|
67
|
-
if (model?.capabilities?.includes("structured_output"))
|
|
68
|
-
return true;
|
|
69
|
-
const id = this.normalizeModelId(modelId);
|
|
70
|
-
if (id.match(/text-embedding|embedding-001|aqa|imagen/)) {
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
return true;
|
|
18
|
+
return ModelRegistry.supports(modelId, "structured_output", "gemini");
|
|
74
19
|
}
|
|
75
20
|
static supportsSystemInstructions(_modelId) {
|
|
76
21
|
return true;
|
|
77
22
|
}
|
|
78
23
|
static supportsJsonMode(modelId) {
|
|
79
|
-
return
|
|
24
|
+
return (ModelRegistry.supports(modelId, "json_mode", "gemini") ||
|
|
25
|
+
this.supportsStructuredOutput(modelId));
|
|
80
26
|
}
|
|
81
27
|
static supportsEmbeddings(modelId) {
|
|
82
28
|
const model = this.findModel(modelId);
|
|
83
|
-
|
|
84
|
-
return true;
|
|
85
|
-
const id = this.normalizeModelId(modelId);
|
|
86
|
-
return !!id.match(/text-embedding|embedding|gemini-embedding/);
|
|
29
|
+
return model?.modalities?.output?.includes("embeddings") ?? modelId.includes("embedding");
|
|
87
30
|
}
|
|
88
31
|
static supportsImageGeneration(modelId) {
|
|
89
32
|
const model = this.findModel(modelId);
|
|
90
|
-
|
|
91
|
-
model?.modalities?.output?.includes("image")
|
|
92
|
-
|
|
93
|
-
const id = this.normalizeModelId(modelId);
|
|
94
|
-
return !!id.match(/imagen/);
|
|
33
|
+
return (model?.capabilities?.includes("image_generation") ||
|
|
34
|
+
model?.modalities?.output?.includes("image") ||
|
|
35
|
+
modelId.includes("imagen"));
|
|
95
36
|
}
|
|
96
37
|
static supportsTranscription(modelId) {
|
|
97
38
|
const model = this.findModel(modelId);
|
|
98
|
-
|
|
99
|
-
return true;
|
|
100
|
-
const id = this.normalizeModelId(modelId);
|
|
101
|
-
return !!id.match(/gemini|flash|pro/);
|
|
39
|
+
return (model?.modalities?.input?.includes("audio") ?? modelId.match(/gemini|flash|pro/) !== null);
|
|
102
40
|
}
|
|
103
41
|
static supportsModeration(_modelId) {
|
|
104
42
|
return false;
|
|
105
43
|
}
|
|
44
|
+
static supportsToolChoice(_modelId) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
106
47
|
static normalizeTemperature(temperature, _model) {
|
|
107
48
|
return temperature;
|
|
108
49
|
}
|
|
109
50
|
static getModalities(modelId) {
|
|
51
|
+
const model = this.findModel(modelId);
|
|
52
|
+
if (model?.modalities)
|
|
53
|
+
return model.modalities;
|
|
110
54
|
const input = ["text"];
|
|
111
55
|
const output = ["text"];
|
|
112
|
-
|
|
113
|
-
if (this.supportsVision(id))
|
|
56
|
+
if (this.supportsVision(modelId))
|
|
114
57
|
input.push("image", "video", "audio", "pdf");
|
|
115
|
-
if (this.supportsImageGeneration(
|
|
58
|
+
if (this.supportsImageGeneration(modelId))
|
|
116
59
|
output.push("image");
|
|
117
|
-
if (this.supportsEmbeddings(
|
|
60
|
+
if (this.supportsEmbeddings(modelId))
|
|
118
61
|
output.push("embeddings");
|
|
119
62
|
return { input, output };
|
|
120
63
|
}
|
|
121
64
|
static getCapabilities(modelId) {
|
|
65
|
+
const model = this.findModel(modelId);
|
|
66
|
+
if (model?.capabilities) {
|
|
67
|
+
const caps = [...model.capabilities];
|
|
68
|
+
if (!caps.includes("streaming"))
|
|
69
|
+
caps.push("streaming");
|
|
70
|
+
return caps;
|
|
71
|
+
}
|
|
122
72
|
const caps = ["streaming"];
|
|
123
|
-
|
|
124
|
-
if (this.supportsTools(id))
|
|
73
|
+
if (this.supportsTools(modelId))
|
|
125
74
|
caps.push("function_calling");
|
|
126
|
-
if (this.supportsStructuredOutput(
|
|
75
|
+
if (this.supportsStructuredOutput(modelId))
|
|
127
76
|
caps.push("structured_output");
|
|
128
|
-
if (this.supportsEmbeddings(
|
|
77
|
+
if (this.supportsEmbeddings(modelId))
|
|
129
78
|
caps.push("embeddings");
|
|
130
|
-
if (this.supportsImageGeneration(
|
|
79
|
+
if (this.supportsImageGeneration(modelId))
|
|
131
80
|
caps.push("image_generation");
|
|
132
81
|
return caps;
|
|
133
82
|
}
|
|
134
83
|
static getPricing(modelId) {
|
|
135
84
|
return PricingRegistry.getPricing(modelId, "gemini");
|
|
136
85
|
}
|
|
137
|
-
static normalizeModelId(modelId) {
|
|
138
|
-
return modelId.replace("models/", "");
|
|
139
|
-
}
|
|
140
86
|
static findModel(modelId) {
|
|
141
87
|
return ModelRegistry.find(modelId, "gemini");
|
|
142
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAS3D,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAS3D,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA0J1D,OAAO,CAAC,cAAc;CAuBvB"}
|
|
@@ -28,7 +28,7 @@ export class GeminiChat {
|
|
|
28
28
|
generationConfig.responseSchema = this.sanitizeSchema(request.response_format.json_schema.schema);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
const { model: _model, messages: _messages, tools: _tools, temperature: _temp, max_tokens: _max, response_format: _format, headers: _headers, requestTimeout, ...rest } = request;
|
|
31
|
+
const { model: _model, messages: _messages, tools: _tools, temperature: _temp, max_tokens: _max, response_format: _format, headers: _headers, tool_choice: _choice, parallel_tool_calls: _parallel, requestTimeout, ...rest } = request;
|
|
32
32
|
const payload = {
|
|
33
33
|
contents,
|
|
34
34
|
generationConfig: {
|
|
@@ -50,6 +50,34 @@ export class GeminiChat {
|
|
|
50
50
|
}))
|
|
51
51
|
}
|
|
52
52
|
];
|
|
53
|
+
if (request.tool_choice) {
|
|
54
|
+
const modeMap = {
|
|
55
|
+
auto: "AUTO",
|
|
56
|
+
required: "ANY",
|
|
57
|
+
none: "NONE"
|
|
58
|
+
};
|
|
59
|
+
const mode = modeMap[request.tool_choice];
|
|
60
|
+
if (mode) {
|
|
61
|
+
payload.toolConfig = { functionCallingConfig: { mode } };
|
|
62
|
+
}
|
|
63
|
+
else if (typeof request.tool_choice === "string") {
|
|
64
|
+
payload.toolConfig = {
|
|
65
|
+
functionCallingConfig: {
|
|
66
|
+
mode: "ANY",
|
|
67
|
+
allowedFunctionNames: [request.tool_choice]
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
else if (typeof request.tool_choice === "object" &&
|
|
72
|
+
"function" in request.tool_choice) {
|
|
73
|
+
payload.toolConfig = {
|
|
74
|
+
functionCallingConfig: {
|
|
75
|
+
mode: "ANY",
|
|
76
|
+
allowedFunctionNames: [request.tool_choice.function.name]
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
53
81
|
}
|
|
54
82
|
logger.logRequest("Gemini", "POST", url, payload);
|
|
55
83
|
const response = await fetchWithTimeout(url, {
|
|
@@ -65,12 +93,13 @@ export class GeminiChat {
|
|
|
65
93
|
const json = (await response.json());
|
|
66
94
|
logger.logResponse("Gemini", response.status, response.statusText, json);
|
|
67
95
|
const candidate = json.candidates?.[0];
|
|
68
|
-
const
|
|
69
|
-
|
|
96
|
+
const contentParts = candidate?.content?.parts || [];
|
|
97
|
+
const content = contentParts
|
|
98
|
+
.filter((p) => p.text)
|
|
70
99
|
.map((p) => p.text)
|
|
71
100
|
.join("\n") || null;
|
|
72
|
-
const tool_calls =
|
|
73
|
-
|
|
101
|
+
const tool_calls = contentParts
|
|
102
|
+
.filter((p) => p.functionCall)
|
|
74
103
|
.map((p) => ({
|
|
75
104
|
id: p.functionCall.name,
|
|
76
105
|
type: "function",
|
|
@@ -79,24 +108,30 @@ export class GeminiChat {
|
|
|
79
108
|
arguments: JSON.stringify(p.functionCall.args)
|
|
80
109
|
}
|
|
81
110
|
}));
|
|
111
|
+
const attachments = contentParts
|
|
112
|
+
.filter((p) => p.inlineData)
|
|
113
|
+
.map((p) => ({
|
|
114
|
+
mimeType: p.inlineData.mimeType,
|
|
115
|
+
data: p.inlineData.data
|
|
116
|
+
}));
|
|
82
117
|
const usage = json.usageMetadata
|
|
83
118
|
? {
|
|
84
119
|
input_tokens: json.usageMetadata.promptTokenCount,
|
|
85
120
|
output_tokens: json.usageMetadata.candidatesTokenCount,
|
|
86
|
-
total_tokens: json.usageMetadata.totalTokenCount
|
|
121
|
+
total_tokens: json.usageMetadata.totalTokenCount,
|
|
122
|
+
cached_tokens: json.usageMetadata.cachedContentTokenCount
|
|
87
123
|
}
|
|
88
124
|
: undefined;
|
|
89
125
|
const calculatedUsage = usage
|
|
90
126
|
? ModelRegistry.calculateCost(usage, request.model, "gemini")
|
|
91
127
|
: undefined;
|
|
92
|
-
return { content, tool_calls, usage: calculatedUsage };
|
|
128
|
+
return { content, tool_calls, usage: calculatedUsage, attachments };
|
|
93
129
|
}
|
|
94
130
|
sanitizeSchema(schema) {
|
|
95
131
|
if (typeof schema !== "object" || schema === null)
|
|
96
132
|
return schema;
|
|
97
133
|
const sanitized = { ...schema };
|
|
98
|
-
//
|
|
99
|
-
delete sanitized.additionalProperties;
|
|
134
|
+
// Clean up internal metadata fields that Gemini definitely rejects
|
|
100
135
|
delete sanitized.$schema;
|
|
101
136
|
delete sanitized.$id;
|
|
102
137
|
delete sanitized.definitions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatUtils.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/ChatUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGvD,qBAAa,eAAe;WACb,eAAe,CAC1B,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,sBAAsB,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatUtils.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/ChatUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGvD,qBAAa,eAAe;WACb,eAAe,CAC1B,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,sBAAsB,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CAyFhF"}
|
|
@@ -3,79 +3,89 @@ export class GeminiChatUtils {
|
|
|
3
3
|
static async convertMessages(messages) {
|
|
4
4
|
const contents = [];
|
|
5
5
|
const systemInstructionParts = [];
|
|
6
|
-
for (
|
|
6
|
+
for (let i = 0; i < messages.length; i++) {
|
|
7
|
+
const msg = messages[i];
|
|
8
|
+
if (!msg)
|
|
9
|
+
continue;
|
|
7
10
|
if (msg.role === "system" || msg.role === "developer") {
|
|
8
11
|
if (msg.content) {
|
|
9
12
|
systemInstructionParts.push({ text: String(msg.content) });
|
|
10
13
|
}
|
|
11
14
|
}
|
|
12
|
-
else if (msg.role === "
|
|
15
|
+
else if (msg.role === "tool") {
|
|
13
16
|
const parts = [];
|
|
14
|
-
|
|
17
|
+
let j = i;
|
|
18
|
+
while (j < messages.length) {
|
|
19
|
+
const toolMsg = messages[j];
|
|
20
|
+
if (!toolMsg || toolMsg.role !== "tool")
|
|
21
|
+
break;
|
|
15
22
|
parts.push({
|
|
16
23
|
functionResponse: {
|
|
17
|
-
name:
|
|
18
|
-
response: { result:
|
|
24
|
+
name: toolMsg.tool_call_id || "unknown",
|
|
25
|
+
response: { result: toolMsg.content }
|
|
19
26
|
}
|
|
20
27
|
});
|
|
21
|
-
|
|
28
|
+
j++;
|
|
22
29
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else if (part.type === "input_audio") {
|
|
30
|
+
contents.push({ role: "user", parts });
|
|
31
|
+
i = j - 1;
|
|
32
|
+
}
|
|
33
|
+
else if (msg.role === "user" || msg.role === "assistant") {
|
|
34
|
+
const parts = [];
|
|
35
|
+
const role = msg.role === "assistant" ? "model" : "user";
|
|
36
|
+
if (msg.content && (typeof msg.content === "string" || msg.content instanceof String)) {
|
|
37
|
+
parts.push({ text: String(msg.content) });
|
|
38
|
+
}
|
|
39
|
+
else if (Array.isArray(msg.content)) {
|
|
40
|
+
for (const part of msg.content) {
|
|
41
|
+
if (part.type === "text") {
|
|
42
|
+
parts.push({ text: part.text });
|
|
43
|
+
}
|
|
44
|
+
else if (part.type === "image_url") {
|
|
45
|
+
const binary = await BinaryUtils.toBase64(part.image_url.url);
|
|
46
|
+
if (binary) {
|
|
45
47
|
parts.push({
|
|
46
48
|
inlineData: {
|
|
47
|
-
mimeType:
|
|
48
|
-
data:
|
|
49
|
+
mimeType: binary.mimeType,
|
|
50
|
+
data: binary.data
|
|
49
51
|
}
|
|
50
52
|
});
|
|
51
53
|
}
|
|
52
|
-
else if (part.type === "video_url") {
|
|
53
|
-
const binary = await BinaryUtils.toBase64(part.video_url.url);
|
|
54
|
-
if (binary) {
|
|
55
|
-
parts.push({
|
|
56
|
-
inlineData: {
|
|
57
|
-
mimeType: binary.mimeType,
|
|
58
|
-
data: binary.data
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
54
|
}
|
|
64
|
-
|
|
65
|
-
if (msg.role === "assistant" && msg.tool_calls) {
|
|
66
|
-
for (const call of msg.tool_calls) {
|
|
55
|
+
else if (part.type === "input_audio") {
|
|
67
56
|
parts.push({
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
57
|
+
inlineData: {
|
|
58
|
+
mimeType: `audio/${part.input_audio.format}`,
|
|
59
|
+
data: part.input_audio.data
|
|
71
60
|
}
|
|
72
61
|
});
|
|
73
62
|
}
|
|
63
|
+
else if (part.type === "video_url") {
|
|
64
|
+
const binary = await BinaryUtils.toBase64(part.video_url.url);
|
|
65
|
+
if (binary) {
|
|
66
|
+
parts.push({
|
|
67
|
+
inlineData: {
|
|
68
|
+
mimeType: binary.mimeType,
|
|
69
|
+
data: binary.data
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
74
|
}
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
}
|
|
76
|
+
if (msg.role === "assistant" && msg.tool_calls) {
|
|
77
|
+
for (const call of msg.tool_calls) {
|
|
78
|
+
parts.push({
|
|
79
|
+
functionCall: {
|
|
80
|
+
name: call.function.name,
|
|
81
|
+
args: JSON.parse(call.function.arguments)
|
|
82
|
+
}
|
|
83
|
+
});
|
|
77
84
|
}
|
|
78
85
|
}
|
|
86
|
+
if (parts.length > 0) {
|
|
87
|
+
contents.push({ role, parts });
|
|
88
|
+
}
|
|
79
89
|
}
|
|
80
90
|
}
|
|
81
91
|
return { contents, systemInstructionParts };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAK7D,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CAiE7D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { handleGeminiError } from "./Errors.js";
|
|
2
2
|
import { logger } from "../../utils/logger.js";
|
|
3
|
+
import { BinaryUtils } from "../../utils/Binary.js";
|
|
3
4
|
export class GeminiImage {
|
|
4
5
|
baseUrl;
|
|
5
6
|
apiKey;
|
|
@@ -13,12 +14,23 @@ export class GeminiImage {
|
|
|
13
14
|
if (request.size) {
|
|
14
15
|
logger.warn(`[Gemini] Ignoring size ${request.size}. Gemini does not support image size customization.`);
|
|
15
16
|
}
|
|
17
|
+
const instance = {
|
|
18
|
+
prompt: request.prompt
|
|
19
|
+
};
|
|
20
|
+
if (request.images && request.images.length > 0) {
|
|
21
|
+
// For Imagen, typically the first image is the source image
|
|
22
|
+
const binary = await BinaryUtils.toBase64(request.images[0]);
|
|
23
|
+
if (binary) {
|
|
24
|
+
instance.image = {
|
|
25
|
+
bytesBase64Encoded: binary.data,
|
|
26
|
+
mimeType: binary.mimeType
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// If more attachments exist, they could be style references
|
|
30
|
+
// Currently, we'll just handle the first one as primary.
|
|
31
|
+
}
|
|
16
32
|
const body = {
|
|
17
|
-
instances: [
|
|
18
|
-
{
|
|
19
|
-
prompt: request.prompt
|
|
20
|
-
}
|
|
21
|
-
],
|
|
33
|
+
instances: [instance],
|
|
22
34
|
parameters: {
|
|
23
35
|
sampleCount: 1
|
|
24
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAUxD,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG1B,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;IAyN7F,OAAO,CAAC,cAAc;CAyBvB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Capabilities } from "./Capabilities.js";
|
|
2
2
|
import { handleGeminiError } from "./Errors.js";
|
|
3
3
|
import { GeminiChatUtils } from "./ChatUtils.js";
|
|
4
|
+
import { ModelRegistry } from "../../models/ModelRegistry.js";
|
|
4
5
|
import { logger } from "../../utils/logger.js";
|
|
5
6
|
import { fetchWithTimeout } from "../../utils/fetch.js";
|
|
6
7
|
export class GeminiStreaming {
|
|
@@ -45,7 +46,7 @@ export class GeminiStreaming {
|
|
|
45
46
|
if (systemInstructionParts.length > 0) {
|
|
46
47
|
payload.systemInstruction = { parts: systemInstructionParts };
|
|
47
48
|
}
|
|
48
|
-
if (request.tools && request.tools.length > 0) {
|
|
49
|
+
if (request.tools && request.tools.length > 0 && request.tool_choice !== "none") {
|
|
49
50
|
payload.tools = [
|
|
50
51
|
{
|
|
51
52
|
functionDeclarations: request.tools.map((t) => ({
|
|
@@ -55,6 +56,34 @@ export class GeminiStreaming {
|
|
|
55
56
|
}))
|
|
56
57
|
}
|
|
57
58
|
];
|
|
59
|
+
if (request.tool_choice) {
|
|
60
|
+
const modeMap = {
|
|
61
|
+
auto: "AUTO",
|
|
62
|
+
required: "ANY",
|
|
63
|
+
none: "NONE"
|
|
64
|
+
};
|
|
65
|
+
const mode = modeMap[request.tool_choice];
|
|
66
|
+
if (mode) {
|
|
67
|
+
payload.toolConfig = { functionCallingConfig: { mode } };
|
|
68
|
+
}
|
|
69
|
+
else if (typeof request.tool_choice === "string") {
|
|
70
|
+
payload.toolConfig = {
|
|
71
|
+
functionCallingConfig: {
|
|
72
|
+
mode: "ANY",
|
|
73
|
+
allowedFunctionNames: [request.tool_choice]
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
else if (typeof request.tool_choice === "object" &&
|
|
78
|
+
"function" in request.tool_choice) {
|
|
79
|
+
payload.toolConfig = {
|
|
80
|
+
functionCallingConfig: {
|
|
81
|
+
mode: "ANY",
|
|
82
|
+
allowedFunctionNames: [request.tool_choice.function.name]
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
58
87
|
}
|
|
59
88
|
let done = false;
|
|
60
89
|
const toolCalls = [];
|
|
@@ -127,6 +156,17 @@ export class GeminiStreaming {
|
|
|
127
156
|
});
|
|
128
157
|
}
|
|
129
158
|
}
|
|
159
|
+
// Capture usage metadata (usually in the last chunk)
|
|
160
|
+
if (json.usageMetadata) {
|
|
161
|
+
const usage = {
|
|
162
|
+
input_tokens: json.usageMetadata.promptTokenCount,
|
|
163
|
+
output_tokens: json.usageMetadata.candidatesTokenCount,
|
|
164
|
+
total_tokens: json.usageMetadata.totalTokenCount,
|
|
165
|
+
cached_tokens: json.usageMetadata.cachedContentTokenCount
|
|
166
|
+
};
|
|
167
|
+
const calculatedUsage = ModelRegistry.calculateCost(usage, request.model, "gemini");
|
|
168
|
+
yield { content: "", usage: calculatedUsage, done: true };
|
|
169
|
+
}
|
|
130
170
|
}
|
|
131
171
|
catch {
|
|
132
172
|
// Ignore parse errors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,iBAAiB,CAAC,EAAE;QAClB,KAAK,EAAE,UAAU,EAAE,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,oBAAoB,EAAE,KAAK,CAAC;YAC1B,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACtC,CAAC,CAAC;KACJ,EAAE,CAAC;IACJ,gBAAgB,CAAC,EAAE;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC1C,CAAC;IACF,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,cAAc,CAAC,EAAE;QACf,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,aAAa,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,KAAK,CAAC;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,aAAa,CAAC,EAAE;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ export declare class MistralCapabilities {
|
|
|
11
11
|
static supportsTranscription(modelId: string): boolean;
|
|
12
12
|
static supportsModeration(modelId: string): boolean;
|
|
13
13
|
static supportsReasoning(modelId: string): boolean;
|
|
14
|
+
static supportsToolChoice(_modelId: string): boolean;
|
|
14
15
|
static findModel(modelId: string): import("../../models/types.js").Model | undefined;
|
|
15
16
|
static getPricing(modelId: string): ModelPricing | undefined;
|
|
16
17
|
static getInputModalities(modelId: string): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAiBjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAIhC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IASpD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAOtD"}
|