@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.
Files changed (112) hide show
  1. package/dist/aliases.d.ts +315 -26
  2. package/dist/aliases.d.ts.map +1 -1
  3. package/dist/aliases.js +334 -45
  4. package/dist/chat/Chat.d.ts +22 -2
  5. package/dist/chat/Chat.d.ts.map +1 -1
  6. package/dist/chat/Chat.js +45 -3
  7. package/dist/chat/ChatOptions.d.ts +3 -1
  8. package/dist/chat/ChatOptions.d.ts.map +1 -1
  9. package/dist/chat/ChatResponse.d.ts +8 -2
  10. package/dist/chat/ChatResponse.d.ts.map +1 -1
  11. package/dist/chat/ChatResponse.js +9 -3
  12. package/dist/chat/ChatStream.d.ts.map +1 -1
  13. package/dist/chat/ChatStream.js +2 -0
  14. package/dist/chat/Tool.d.ts.map +1 -1
  15. package/dist/chat/Tool.js +21 -11
  16. package/dist/chat/ToolHandler.d.ts.map +1 -1
  17. package/dist/chat/ToolHandler.js +9 -2
  18. package/dist/chat/Validation.d.ts +1 -0
  19. package/dist/chat/Validation.d.ts.map +1 -1
  20. package/dist/chat/Validation.js +10 -0
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/llm.d.ts +4 -0
  24. package/dist/llm.d.ts.map +1 -1
  25. package/dist/models/ModelRegistry.d.ts +3 -0
  26. package/dist/models/ModelRegistry.d.ts.map +1 -1
  27. package/dist/models/ModelRegistry.js +53 -16
  28. package/dist/models/PricingRegistry.d.ts.map +1 -1
  29. package/dist/models/PricingRegistry.js +14 -0
  30. package/dist/models/models.json +15118 -8614
  31. package/dist/providers/BaseProvider.d.ts.map +1 -1
  32. package/dist/providers/BaseProvider.js +1 -0
  33. package/dist/providers/Provider.d.ts +33 -0
  34. package/dist/providers/Provider.d.ts.map +1 -1
  35. package/dist/providers/anthropic/AnthropicProvider.js +1 -1
  36. package/dist/providers/anthropic/Capabilities.d.ts +1 -0
  37. package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
  38. package/dist/providers/anthropic/Capabilities.js +15 -34
  39. package/dist/providers/anthropic/Chat.d.ts.map +1 -1
  40. package/dist/providers/anthropic/Chat.js +16 -2
  41. package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
  42. package/dist/providers/anthropic/Streaming.js +15 -1
  43. package/dist/providers/bedrock/BedrockProvider.d.ts +1 -1
  44. package/dist/providers/bedrock/BedrockProvider.js +1 -1
  45. package/dist/providers/bedrock/Capabilities.d.ts +3 -28
  46. package/dist/providers/bedrock/Capabilities.d.ts.map +1 -1
  47. package/dist/providers/bedrock/Capabilities.js +62 -183
  48. package/dist/providers/bedrock/Chat.d.ts.map +1 -1
  49. package/dist/providers/bedrock/Chat.js +1 -0
  50. package/dist/providers/bedrock/Streaming.d.ts.map +1 -1
  51. package/dist/providers/bedrock/Streaming.js +1 -0
  52. package/dist/providers/bedrock/mapper.d.ts +4 -3
  53. package/dist/providers/bedrock/mapper.d.ts.map +1 -1
  54. package/dist/providers/bedrock/mapper.js +19 -4
  55. package/dist/providers/deepseek/Capabilities.d.ts +2 -1
  56. package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
  57. package/dist/providers/deepseek/Capabilities.js +21 -30
  58. package/dist/providers/deepseek/DeepSeekProvider.d.ts +1 -1
  59. package/dist/providers/gemini/Capabilities.d.ts +1 -1
  60. package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
  61. package/dist/providers/gemini/Capabilities.js +33 -87
  62. package/dist/providers/gemini/Chat.d.ts.map +1 -1
  63. package/dist/providers/gemini/Chat.js +44 -9
  64. package/dist/providers/gemini/ChatUtils.d.ts.map +1 -1
  65. package/dist/providers/gemini/ChatUtils.js +59 -49
  66. package/dist/providers/gemini/GeminiProvider.js +1 -1
  67. package/dist/providers/gemini/Image.d.ts.map +1 -1
  68. package/dist/providers/gemini/Image.js +17 -5
  69. package/dist/providers/gemini/Streaming.d.ts.map +1 -1
  70. package/dist/providers/gemini/Streaming.js +41 -1
  71. package/dist/providers/gemini/types.d.ts +1 -0
  72. package/dist/providers/gemini/types.d.ts.map +1 -1
  73. package/dist/providers/mistral/Capabilities.d.ts +1 -0
  74. package/dist/providers/mistral/Capabilities.d.ts.map +1 -1
  75. package/dist/providers/mistral/Capabilities.js +30 -59
  76. package/dist/providers/mistral/Chat.d.ts.map +1 -1
  77. package/dist/providers/mistral/Chat.js +13 -1
  78. package/dist/providers/mistral/Streaming.d.ts.map +1 -1
  79. package/dist/providers/mistral/Streaming.js +13 -1
  80. package/dist/providers/mistral/Transcription.d.ts.map +1 -1
  81. package/dist/providers/mistral/Transcription.js +3 -1
  82. package/dist/providers/ollama/Capabilities.d.ts +1 -0
  83. package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
  84. package/dist/providers/ollama/Capabilities.js +17 -27
  85. package/dist/providers/openai/Capabilities.d.ts +2 -1
  86. package/dist/providers/openai/Capabilities.d.ts.map +1 -1
  87. package/dist/providers/openai/Capabilities.js +35 -71
  88. package/dist/providers/openai/Chat.d.ts.map +1 -1
  89. package/dist/providers/openai/Chat.js +4 -1
  90. package/dist/providers/openai/Image.d.ts +1 -0
  91. package/dist/providers/openai/Image.d.ts.map +1 -1
  92. package/dist/providers/openai/Image.js +61 -2
  93. package/dist/providers/openai/Streaming.d.ts.map +1 -1
  94. package/dist/providers/openai/Streaming.js +7 -1
  95. package/dist/providers/openai/Transcription.d.ts.map +1 -1
  96. package/dist/providers/openai/Transcription.js +7 -2
  97. package/dist/providers/openrouter/Capabilities.d.ts +10 -9
  98. package/dist/providers/openrouter/Capabilities.d.ts.map +1 -1
  99. package/dist/providers/openrouter/Capabilities.js +25 -48
  100. package/dist/providers/utils.d.ts +4 -0
  101. package/dist/providers/utils.d.ts.map +1 -1
  102. package/dist/providers/utils.js +11 -0
  103. package/dist/providers/xai/Capabilities.d.ts +13 -9
  104. package/dist/providers/xai/Capabilities.d.ts.map +1 -1
  105. package/dist/providers/xai/Capabilities.js +34 -65
  106. package/dist/transcription/Transcription.d.ts +23 -1
  107. package/dist/transcription/Transcription.d.ts.map +1 -1
  108. package/dist/transcription/Transcription.js +22 -0
  109. package/dist/utils/Binary.d.ts +8 -0
  110. package/dist/utils/Binary.d.ts.map +1 -1
  111. package/dist/utils/Binary.js +12 -0
  112. 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
- const val = ModelRegistry.getContextWindow(modelId, "gemini");
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
- const val = ModelRegistry.getMaxOutputTokens(modelId, "gemini");
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
- const model = this.findModel(modelId);
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
- const model = this.findModel(modelId);
57
- if (model?.capabilities?.includes("function_calling"))
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
- const model = this.findModel(modelId);
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 this.supportsStructuredOutput(modelId);
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
- if (model?.modalities?.output?.includes("embeddings"))
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
- if (model?.capabilities?.includes("image_generation") ||
91
- model?.modalities?.output?.includes("image"))
92
- return true;
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
- if (model?.modalities?.input?.includes("audio"))
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
- const id = this.normalizeModelId(modelId);
113
- if (this.supportsVision(id))
56
+ if (this.supportsVision(modelId))
114
57
  input.push("image", "video", "audio", "pdf");
115
- if (this.supportsImageGeneration(id))
58
+ if (this.supportsImageGeneration(modelId))
116
59
  output.push("image");
117
- if (this.supportsEmbeddings(id))
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
- const id = this.normalizeModelId(modelId);
124
- if (this.supportsTools(id))
73
+ if (this.supportsTools(modelId))
125
74
  caps.push("function_calling");
126
- if (this.supportsStructuredOutput(id))
75
+ if (this.supportsStructuredOutput(modelId))
127
76
  caps.push("structured_output");
128
- if (this.supportsEmbeddings(id))
77
+ if (this.supportsEmbeddings(modelId))
129
78
  caps.push("embeddings");
130
- if (this.supportsImageGeneration(id))
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;IAmH1D,OAAO,CAAC,cAAc;CAwBvB"}
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 content = candidate?.content?.parts
69
- ?.filter((p) => p.text)
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 = candidate?.content?.parts
73
- ?.filter((p) => p.functionCall)
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
- // Remove unsupported fields
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;CAgFhF"}
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 (const msg of messages) {
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 === "user" || msg.role === "assistant" || msg.role === "tool") {
15
+ else if (msg.role === "tool") {
13
16
  const parts = [];
14
- if (msg.role === "tool") {
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: msg.tool_call_id || "unknown",
18
- response: { result: msg.content }
24
+ name: toolMsg.tool_call_id || "unknown",
25
+ response: { result: toolMsg.content }
19
26
  }
20
27
  });
21
- contents.push({ role: "user", parts });
28
+ j++;
22
29
  }
23
- else {
24
- const role = msg.role === "assistant" ? "model" : "user";
25
- if (msg.content && (typeof msg.content === "string" || msg.content instanceof String)) {
26
- parts.push({ text: String(msg.content) });
27
- }
28
- else if (Array.isArray(msg.content)) {
29
- for (const part of msg.content) {
30
- if (part.type === "text") {
31
- parts.push({ text: part.text });
32
- }
33
- else if (part.type === "image_url") {
34
- const binary = await BinaryUtils.toBase64(part.image_url.url);
35
- if (binary) {
36
- parts.push({
37
- inlineData: {
38
- mimeType: binary.mimeType,
39
- data: binary.data
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: `audio/${part.input_audio.format}`,
48
- data: part.input_audio.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
- functionCall: {
69
- name: call.function.name,
70
- args: JSON.parse(call.function.arguments)
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
- if (parts.length > 0) {
76
- contents.push({ role, parts });
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 };
@@ -51,7 +51,7 @@ export class GeminiProvider extends BaseProvider {
51
51
  return "Gemini";
52
52
  }
53
53
  defaultModel(_feature) {
54
- return "gemini-2.0-flash-exp";
54
+ return "gemini-1.5-flash";
55
55
  }
56
56
  async chat(request) {
57
57
  return this.chatHandler.execute(request);
@@ -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;AAI7D,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;CAmD7D"}
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;AASxD,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;IA+K7F,OAAO,CAAC,cAAc;CAyBvB"}
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
@@ -61,6 +61,7 @@ export interface GeminiGenerateContentResponse {
61
61
  promptTokenCount: number;
62
62
  candidatesTokenCount: number;
63
63
  totalTokenCount: number;
64
+ cachedContentTokenCount?: number;
64
65
  };
65
66
  modelVersion?: string;
66
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/types.ts"],"names":[],"mappings":"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"}
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;IAkBjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAcvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAS9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOnD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQlD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAIhC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAO5D,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IASpD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAOtD"}
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"}