@node-llm/core 1.7.0 → 1.8.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 (81) hide show
  1. package/README.md +9 -8
  2. package/dist/aliases.d.ts +213 -0
  3. package/dist/aliases.d.ts.map +1 -1
  4. package/dist/aliases.js +238 -25
  5. package/dist/chat/Chat.d.ts +2 -2
  6. package/dist/chat/Chat.d.ts.map +1 -1
  7. package/dist/chat/Chat.js +21 -5
  8. package/dist/chat/ChatResponse.d.ts +5 -1
  9. package/dist/chat/ChatResponse.d.ts.map +1 -1
  10. package/dist/chat/ChatResponse.js +9 -3
  11. package/dist/chat/Content.d.ts +7 -0
  12. package/dist/chat/Content.d.ts.map +1 -1
  13. package/dist/config.d.ts +28 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +50 -0
  16. package/dist/llm.d.ts.map +1 -1
  17. package/dist/llm.js +3 -2
  18. package/dist/models/models.d.ts +321 -76
  19. package/dist/models/models.d.ts.map +1 -1
  20. package/dist/models/models.js +7764 -2934
  21. package/dist/providers/Provider.d.ts +5 -0
  22. package/dist/providers/Provider.d.ts.map +1 -1
  23. package/dist/providers/anthropic/Capabilities.d.ts +1 -0
  24. package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
  25. package/dist/providers/anthropic/Capabilities.js +8 -5
  26. package/dist/providers/bedrock/BedrockProvider.d.ts +53 -0
  27. package/dist/providers/bedrock/BedrockProvider.d.ts.map +1 -0
  28. package/dist/providers/bedrock/BedrockProvider.js +107 -0
  29. package/dist/providers/bedrock/Capabilities.d.ts +50 -0
  30. package/dist/providers/bedrock/Capabilities.d.ts.map +1 -0
  31. package/dist/providers/bedrock/Capabilities.js +233 -0
  32. package/dist/providers/bedrock/Chat.d.ts +26 -0
  33. package/dist/providers/bedrock/Chat.d.ts.map +1 -0
  34. package/dist/providers/bedrock/Chat.js +170 -0
  35. package/dist/providers/bedrock/Embeddings.d.ts +22 -0
  36. package/dist/providers/bedrock/Embeddings.d.ts.map +1 -0
  37. package/dist/providers/bedrock/Embeddings.js +100 -0
  38. package/dist/providers/bedrock/Image.d.ts +33 -0
  39. package/dist/providers/bedrock/Image.d.ts.map +1 -0
  40. package/dist/providers/bedrock/Image.js +154 -0
  41. package/dist/providers/bedrock/Models.d.ts +34 -0
  42. package/dist/providers/bedrock/Models.d.ts.map +1 -0
  43. package/dist/providers/bedrock/Models.js +131 -0
  44. package/dist/providers/bedrock/Moderation.d.ts +23 -0
  45. package/dist/providers/bedrock/Moderation.d.ts.map +1 -0
  46. package/dist/providers/bedrock/Moderation.js +138 -0
  47. package/dist/providers/bedrock/Streaming.d.ts +21 -0
  48. package/dist/providers/bedrock/Streaming.d.ts.map +1 -0
  49. package/dist/providers/bedrock/Streaming.js +240 -0
  50. package/dist/providers/bedrock/config.d.ts +57 -0
  51. package/dist/providers/bedrock/config.d.ts.map +1 -0
  52. package/dist/providers/bedrock/config.js +33 -0
  53. package/dist/providers/bedrock/index.d.ts +8 -0
  54. package/dist/providers/bedrock/index.d.ts.map +1 -0
  55. package/dist/providers/bedrock/index.js +30 -0
  56. package/dist/providers/bedrock/mapper.d.ts +37 -0
  57. package/dist/providers/bedrock/mapper.d.ts.map +1 -0
  58. package/dist/providers/bedrock/mapper.js +204 -0
  59. package/dist/providers/bedrock/types.d.ts +179 -0
  60. package/dist/providers/bedrock/types.d.ts.map +1 -0
  61. package/dist/providers/bedrock/types.js +7 -0
  62. package/dist/providers/deepseek/Capabilities.d.ts +3 -2
  63. package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
  64. package/dist/providers/deepseek/Capabilities.js +19 -5
  65. package/dist/providers/gemini/Capabilities.d.ts +1 -0
  66. package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
  67. package/dist/providers/gemini/Capabilities.js +9 -6
  68. package/dist/providers/gemini/Chat.d.ts.map +1 -1
  69. package/dist/providers/gemini/Chat.js +6 -23
  70. package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
  71. package/dist/providers/ollama/Capabilities.js +4 -1
  72. package/dist/providers/openai/Capabilities.d.ts +1 -0
  73. package/dist/providers/openai/Capabilities.d.ts.map +1 -1
  74. package/dist/providers/openai/Capabilities.js +14 -11
  75. package/dist/providers/registry.d.ts +2 -1
  76. package/dist/providers/registry.d.ts.map +1 -1
  77. package/dist/providers/registry.js +2 -1
  78. package/dist/utils/AwsSigV4.d.ts +51 -0
  79. package/dist/utils/AwsSigV4.d.ts.map +1 -0
  80. package/dist/utils/AwsSigV4.js +209 -0
  81. package/package.json +1 -1
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Bedrock Message Mapper
3
+ *
4
+ * Converts NodeLLM messages to Bedrock Converse API format.
5
+ * Handles system messages, tool calls, and content blocks.
6
+ */
7
+ // ─────────────────────────────────────────────────────────────────────────────
8
+ // Message Conversion
9
+ // ─────────────────────────────────────────────────────────────────────────────
10
+ /**
11
+ * Convert a NodeLLM message to Bedrock content blocks.
12
+ */
13
+ function messageContentToBlocks(content) {
14
+ if (typeof content === "string") {
15
+ return content ? [{ text: content }] : [];
16
+ }
17
+ if (Array.isArray(content)) {
18
+ const blocks = [];
19
+ for (const part of content) {
20
+ if (part.type === "text") {
21
+ const block = { text: part.text };
22
+ blocks.push(block);
23
+ if (part.cache_control?.type === "ephemeral") {
24
+ blocks.push({ cachePoint: { type: "default" } });
25
+ }
26
+ }
27
+ else if (part.type === "image_url" && part.image_url) {
28
+ // Extract base64 data from data URL
29
+ const match = part.image_url.url.match(/^data:image\/(\w+);base64,(.+)$/);
30
+ if (match && match[1] && match[2]) {
31
+ blocks.push({
32
+ image: {
33
+ format: match[1].replace("jpg", "jpeg"),
34
+ source: { bytes: match[2] }
35
+ }
36
+ });
37
+ }
38
+ else {
39
+ // Fallback if not a data URL or missing base64
40
+ blocks.push({ text: `[Image: ${part.image_url.url}]` });
41
+ }
42
+ }
43
+ else {
44
+ // Default to empty text for unsupported types
45
+ blocks.push({ text: "" });
46
+ }
47
+ }
48
+ return blocks.filter((b) => b.text !== "");
49
+ }
50
+ return [];
51
+ }
52
+ /**
53
+ * Convert NodeLLM messages to Bedrock Converse format.
54
+ * Extracts system messages to the top-level system field.
55
+ */
56
+ export function convertMessages(messages) {
57
+ const systemBlocks = [];
58
+ const bedrockMessages = [];
59
+ let currentToolResults = [];
60
+ const flushToolResults = () => {
61
+ if (currentToolResults.length > 0) {
62
+ bedrockMessages.push({
63
+ role: "user",
64
+ content: currentToolResults
65
+ });
66
+ currentToolResults = [];
67
+ }
68
+ };
69
+ for (const msg of messages) {
70
+ if (msg.role !== "tool") {
71
+ flushToolResults();
72
+ }
73
+ // System messages go to the top-level system field
74
+ if (msg.role === "system") {
75
+ const blocks = messageContentToBlocks(msg.content);
76
+ systemBlocks.push(...blocks);
77
+ continue;
78
+ }
79
+ // User messages
80
+ if (msg.role === "user") {
81
+ bedrockMessages.push({
82
+ role: "user",
83
+ content: messageContentToBlocks(msg.content)
84
+ });
85
+ continue;
86
+ }
87
+ // Assistant messages (may include tool calls and reasoning)
88
+ if (msg.role === "assistant") {
89
+ const contentBlocks = messageContentToBlocks(msg.content);
90
+ // Add reasoning content if present
91
+ if (msg.reasoning) {
92
+ contentBlocks.unshift({
93
+ reasoningContent: {
94
+ text: msg.reasoning
95
+ }
96
+ });
97
+ }
98
+ // Add tool use blocks if present
99
+ if (msg.tool_calls) {
100
+ for (const toolCall of msg.tool_calls) {
101
+ contentBlocks.push({
102
+ toolUse: {
103
+ toolUseId: toolCall.id,
104
+ name: toolCall.function.name,
105
+ input: JSON.parse(toolCall.function.arguments || "{}")
106
+ }
107
+ });
108
+ }
109
+ }
110
+ bedrockMessages.push({
111
+ role: "assistant",
112
+ content: contentBlocks
113
+ });
114
+ continue;
115
+ }
116
+ // Tool result messages
117
+ if (msg.role === "tool") {
118
+ currentToolResults.push({
119
+ toolResult: {
120
+ toolUseId: msg.tool_call_id || "",
121
+ content: [{ text: typeof msg.content === "string" ? msg.content : "" }],
122
+ status: msg.isError ? "error" : "success"
123
+ }
124
+ });
125
+ }
126
+ }
127
+ flushToolResults();
128
+ return {
129
+ messages: bedrockMessages,
130
+ system: systemBlocks.length > 0 ? systemBlocks : undefined
131
+ };
132
+ }
133
+ // ─────────────────────────────────────────────────────────────────────────────
134
+ // Tool Conversion
135
+ // ─────────────────────────────────────────────────────────────────────────────
136
+ /**
137
+ * Convert NodeLLM tool definitions to Bedrock tool config.
138
+ */
139
+ export function convertTools(tools) {
140
+ if (!tools || tools.length === 0) {
141
+ return undefined;
142
+ }
143
+ return {
144
+ tools: tools.map((tool) => ({
145
+ toolSpec: {
146
+ name: tool.function.name,
147
+ description: tool.function.description,
148
+ inputSchema: {
149
+ json: tool.function.parameters || {}
150
+ }
151
+ }
152
+ }))
153
+ };
154
+ }
155
+ // ─────────────────────────────────────────────────────────────────────────────
156
+ // Request Builder
157
+ // ─────────────────────────────────────────────────────────────────────────────
158
+ /**
159
+ * Build a complete Bedrock Converse request from NodeLLM ChatRequest.
160
+ */
161
+ export function buildConverseRequest(messages, tools, options) {
162
+ const { messages: bedrockMessages, system } = convertMessages(messages);
163
+ const request = {
164
+ messages: bedrockMessages
165
+ };
166
+ if (system) {
167
+ request.system = system;
168
+ }
169
+ const toolConfig = convertTools(tools);
170
+ if (toolConfig) {
171
+ request.toolConfig = toolConfig;
172
+ }
173
+ if (options?.guardrail) {
174
+ request.guardrailConfig = options.guardrail;
175
+ }
176
+ // Inference config (only add if we have values)
177
+ if (options?.maxTokens || options?.temperature !== undefined) {
178
+ request.inferenceConfig = {};
179
+ if (options.maxTokens) {
180
+ request.inferenceConfig.maxTokens = options.maxTokens;
181
+ }
182
+ if (options.temperature !== undefined) {
183
+ request.inferenceConfig.temperature = options.temperature;
184
+ }
185
+ }
186
+ // Thinking config for Claude 3.7+
187
+ if (options?.thinking?.budget) {
188
+ request.additionalModelRequestFields = {
189
+ ...request.additionalModelRequestFields,
190
+ thinking: {
191
+ type: "enabled",
192
+ budget_tokens: options.thinking.budget
193
+ }
194
+ };
195
+ }
196
+ // Merge any other additional fields
197
+ if (options?.additionalModelRequestFields) {
198
+ request.additionalModelRequestFields = {
199
+ ...request.additionalModelRequestFields,
200
+ ...options.additionalModelRequestFields
201
+ };
202
+ }
203
+ return request;
204
+ }
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Bedrock Converse API Types
3
+ *
4
+ * These types match the AWS Bedrock Converse API schema.
5
+ * Reference: https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html
6
+ */
7
+ export interface BedrockContentBlock {
8
+ text?: string;
9
+ image?: {
10
+ format: "png" | "jpeg" | "gif" | "webp";
11
+ source: {
12
+ bytes: string;
13
+ };
14
+ };
15
+ document?: {
16
+ format: "pdf" | "csv" | "doc" | "docx" | "xls" | "xlsx" | "html" | "txt" | "md";
17
+ name: string;
18
+ source: {
19
+ bytes: string;
20
+ };
21
+ };
22
+ reasoningContent?: {
23
+ text?: string;
24
+ redactedContent?: string;
25
+ };
26
+ toolUse?: {
27
+ toolUseId: string;
28
+ name: string;
29
+ input: Record<string, unknown>;
30
+ };
31
+ toolResult?: {
32
+ toolUseId: string;
33
+ content: BedrockContentBlock[];
34
+ status?: "success" | "error";
35
+ };
36
+ guardContent?: {
37
+ text: {
38
+ text: string;
39
+ };
40
+ };
41
+ cachePoint?: {
42
+ type: "default";
43
+ };
44
+ }
45
+ export interface BedrockMessage {
46
+ role: "user" | "assistant";
47
+ content: BedrockContentBlock[];
48
+ }
49
+ export interface BedrockToolSpec {
50
+ name: string;
51
+ description?: string;
52
+ inputSchema: {
53
+ json: Record<string, unknown>;
54
+ };
55
+ }
56
+ export interface BedrockToolConfig {
57
+ tools: Array<{
58
+ toolSpec: BedrockToolSpec;
59
+ }>;
60
+ toolChoice?: {
61
+ auto?: Record<string, never>;
62
+ any?: Record<string, never>;
63
+ tool?: {
64
+ name: string;
65
+ };
66
+ };
67
+ }
68
+ export interface BedrockInferenceConfig {
69
+ maxTokens?: number;
70
+ temperature?: number;
71
+ topP?: number;
72
+ stopSequences?: string[];
73
+ }
74
+ export interface BedrockGuardrailConfig {
75
+ guardrailIdentifier: string;
76
+ guardrailVersion: string;
77
+ trace?: "enabled" | "disabled";
78
+ }
79
+ export interface BedrockConverseRequest {
80
+ messages: BedrockMessage[];
81
+ system?: BedrockContentBlock[];
82
+ toolConfig?: BedrockToolConfig;
83
+ guardrailConfig?: BedrockGuardrailConfig;
84
+ inferenceConfig?: BedrockInferenceConfig;
85
+ additionalModelRequestFields?: Record<string, any>;
86
+ }
87
+ export interface BedrockConverseResponse {
88
+ output: {
89
+ message: BedrockMessage;
90
+ };
91
+ stopReason: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence" | "content_filtered" | "guardrail_intervening" | "guardrail_intervened";
92
+ usage: {
93
+ inputTokens: number;
94
+ outputTokens: number;
95
+ totalTokens: number;
96
+ cacheReadInputTokens?: number;
97
+ cacheWriteInputTokens?: number;
98
+ };
99
+ trace?: {
100
+ guardrail?: {
101
+ modelOutput?: string[];
102
+ inputAssessment?: Record<string, any>;
103
+ outputAssessments?: Record<string, any>;
104
+ };
105
+ };
106
+ metrics?: {
107
+ latencyMs: number;
108
+ };
109
+ }
110
+ export interface BedrockStreamEvent {
111
+ messageStart?: {
112
+ role: "assistant";
113
+ };
114
+ contentBlockStart?: {
115
+ contentBlockIndex: number;
116
+ start: {
117
+ text?: string;
118
+ reasoningContent?: {
119
+ text?: string;
120
+ };
121
+ toolUse?: {
122
+ toolUseId: string;
123
+ name: string;
124
+ };
125
+ };
126
+ };
127
+ contentBlockDelta?: {
128
+ contentBlockIndex: number;
129
+ delta: {
130
+ text?: string;
131
+ reasoningContent?: {
132
+ text?: string;
133
+ };
134
+ toolUse?: {
135
+ input: string;
136
+ };
137
+ };
138
+ };
139
+ contentBlockStop?: {
140
+ contentBlockIndex: number;
141
+ };
142
+ messageStop?: {
143
+ stopReason: string;
144
+ };
145
+ metadata?: {
146
+ usage: {
147
+ inputTokens: number;
148
+ outputTokens: number;
149
+ totalTokens: number;
150
+ };
151
+ metrics?: {
152
+ latencyMs: number;
153
+ };
154
+ trace?: {
155
+ guardrail?: {
156
+ modelOutput?: string[];
157
+ inputAssessment?: Record<string, any>;
158
+ outputAssessments?: Record<string, any>;
159
+ };
160
+ };
161
+ };
162
+ }
163
+ export interface BedrockModelSummary {
164
+ modelId: string;
165
+ modelArn: string;
166
+ modelName?: string;
167
+ providerName?: string;
168
+ inputModalities?: string[];
169
+ outputModalities?: string[];
170
+ responseStreamingSupported?: boolean;
171
+ inferenceTypesSupported?: Array<"ON_DEMAND" | "PROVISIONED" | "INFERENCE_PROFILE">;
172
+ modelLifecycle?: {
173
+ status: "ACTIVE" | "LEGACY";
174
+ };
175
+ }
176
+ export interface BedrockListModelsResponse {
177
+ modelSummaries: BedrockModelSummary[];
178
+ }
179
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/bedrock/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Bedrock Converse API Types
3
+ *
4
+ * These types match the AWS Bedrock Converse API schema.
5
+ * Reference: https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html
6
+ */
7
+ export {};
@@ -3,14 +3,15 @@ export declare class Capabilities {
3
3
  static getCapabilities(modelId: string): string[];
4
4
  static getContextWindow(modelId: string): number | null;
5
5
  static getMaxOutputTokens(modelId: string): number | null;
6
- static supportsVision(_modelId: string): boolean;
6
+ static supportsVision(modelId: string): boolean;
7
7
  static supportsTools(modelId: string): boolean;
8
8
  static supportsStructuredOutput(modelId: string): boolean;
9
- static supportsEmbeddings(_modelId: string): boolean;
9
+ static supportsEmbeddings(modelId: string): boolean;
10
10
  static supportsImageGeneration(_modelId: string): boolean;
11
11
  static supportsTranscription(_modelId: string): boolean;
12
12
  static supportsModeration(_modelId: string): boolean;
13
13
  static supportsReasoning(modelId: string): boolean;
14
14
  static getPricing(modelId: string): ModelPricing | undefined;
15
+ private static findModel;
15
16
  }
16
17
  //# sourceMappingURL=Capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAcjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOzD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIhD,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIvD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAG7D"}
1
+ {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAcjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAK/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIvD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOlD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
@@ -26,17 +26,25 @@ export class Capabilities {
26
26
  }
27
27
  return 4_096;
28
28
  }
29
- static supportsVision(_modelId) {
30
- return false;
29
+ static supportsVision(modelId) {
30
+ const model = this.findModel(modelId);
31
+ return model?.modalities?.input?.includes("image") || false;
31
32
  }
32
33
  static supportsTools(modelId) {
34
+ const model = this.findModel(modelId);
35
+ if (model?.capabilities?.includes("function_calling") || model?.capabilities?.includes("tools"))
36
+ return true;
33
37
  return /deepseek-chat/.test(modelId);
34
38
  }
35
39
  static supportsStructuredOutput(modelId) {
36
- return /deepseek-(?:chat|reasoner)/.test(modelId);
40
+ const model = this.findModel(modelId);
41
+ if (model?.capabilities?.includes("structured_output"))
42
+ return true;
43
+ return /deepseek-chat/.test(modelId);
37
44
  }
38
- static supportsEmbeddings(_modelId) {
39
- return false;
45
+ static supportsEmbeddings(modelId) {
46
+ const model = this.findModel(modelId);
47
+ return model?.modalities?.output?.includes("embeddings") || false;
40
48
  }
41
49
  static supportsImageGeneration(_modelId) {
42
50
  return false;
@@ -48,9 +56,15 @@ export class Capabilities {
48
56
  return false;
49
57
  }
50
58
  static supportsReasoning(modelId) {
59
+ const model = this.findModel(modelId);
60
+ if (model?.capabilities?.includes("reasoning"))
61
+ return true;
51
62
  return /deepseek-reasoner/.test(modelId);
52
63
  }
53
64
  static getPricing(modelId) {
54
65
  return PricingRegistry.getPricing(modelId, "deepseek");
55
66
  }
67
+ static findModel(modelId) {
68
+ return ModelRegistry.find(modelId, "deepseek");
69
+ }
56
70
  }
@@ -19,5 +19,6 @@ export declare class Capabilities {
19
19
  static getCapabilities(modelId: string): string[];
20
20
  static getPricing(modelId: string): ModelPricing | undefined;
21
21
  private static normalizeModelId;
22
+ private static findModel;
22
23
  }
23
24
  //# sourceMappingURL=Capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2BvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAwBzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAW/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAW9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWzD,MAAM,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQnD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAYxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQtD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIhG,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAY5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAUjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAGhC"}
1
+ {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2BvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAwBzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAW/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAW9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWzD,MAAM,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQnD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAYxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQtD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIhG,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAY5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAUjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
@@ -43,7 +43,7 @@ export class Capabilities {
43
43
  return 4_096;
44
44
  }
45
45
  static supportsVision(modelId) {
46
- const model = ModelRegistry.find(modelId, "gemini");
46
+ const model = this.findModel(modelId);
47
47
  if (model?.modalities?.input?.includes("image"))
48
48
  return true;
49
49
  const id = this.normalizeModelId(modelId);
@@ -53,7 +53,7 @@ export class Capabilities {
53
53
  return !!id.match(/gemini|flash|pro|imagen/);
54
54
  }
55
55
  static supportsTools(modelId) {
56
- const model = ModelRegistry.find(modelId, "gemini");
56
+ const model = this.findModel(modelId);
57
57
  if (model?.capabilities?.includes("function_calling"))
58
58
  return true;
59
59
  const id = this.normalizeModelId(modelId);
@@ -63,7 +63,7 @@ export class Capabilities {
63
63
  return !!id.match(/gemini|pro|flash/);
64
64
  }
65
65
  static supportsStructuredOutput(modelId) {
66
- const model = ModelRegistry.find(modelId, "gemini");
66
+ const model = this.findModel(modelId);
67
67
  if (model?.capabilities?.includes("structured_output"))
68
68
  return true;
69
69
  const id = this.normalizeModelId(modelId);
@@ -79,14 +79,14 @@ export class Capabilities {
79
79
  return this.supportsStructuredOutput(modelId);
80
80
  }
81
81
  static supportsEmbeddings(modelId) {
82
- const model = ModelRegistry.find(modelId, "gemini");
82
+ const model = this.findModel(modelId);
83
83
  if (model?.modalities?.output?.includes("embeddings"))
84
84
  return true;
85
85
  const id = this.normalizeModelId(modelId);
86
86
  return !!id.match(/text-embedding|embedding|gemini-embedding/);
87
87
  }
88
88
  static supportsImageGeneration(modelId) {
89
- const model = ModelRegistry.find(modelId, "gemini");
89
+ const model = this.findModel(modelId);
90
90
  if (model?.capabilities?.includes("image_generation") ||
91
91
  model?.modalities?.output?.includes("image"))
92
92
  return true;
@@ -94,7 +94,7 @@ export class Capabilities {
94
94
  return !!id.match(/imagen/);
95
95
  }
96
96
  static supportsTranscription(modelId) {
97
- const model = ModelRegistry.find(modelId, "gemini");
97
+ const model = this.findModel(modelId);
98
98
  if (model?.modalities?.input?.includes("audio"))
99
99
  return true;
100
100
  const id = this.normalizeModelId(modelId);
@@ -137,4 +137,7 @@ export class Capabilities {
137
137
  static normalizeModelId(modelId) {
138
138
  return modelId.replace("models/", "");
139
139
  }
140
+ static findModel(modelId) {
141
+ return ModelRegistry.find(modelId, "gemini");
142
+ }
140
143
  }
@@ -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;IAuI1D,OAAO,CAAC,cAAc;CAyBvB"}
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"}
@@ -37,11 +37,6 @@ export class GeminiChat {
37
37
  },
38
38
  ...rest
39
39
  };
40
- if (request.thinking) {
41
- payload.thinkingConfig = {
42
- includeThoughts: true
43
- };
44
- }
45
40
  if (systemInstructionParts.length > 0) {
46
41
  payload.systemInstruction = { parts: systemInstructionParts };
47
42
  }
@@ -51,7 +46,7 @@ export class GeminiChat {
51
46
  functionDeclarations: request.tools.map((t) => ({
52
47
  name: t.function.name,
53
48
  description: t.function.description,
54
- parameters: this.sanitizeSchema(t.function.parameters)
49
+ parameters: t.function.parameters
55
50
  }))
56
51
  }
57
52
  ];
@@ -70,12 +65,8 @@ export class GeminiChat {
70
65
  const json = (await response.json());
71
66
  logger.logResponse("Gemini", response.status, response.statusText, json);
72
67
  const candidate = json.candidates?.[0];
73
- const reasoningText = candidate?.content?.parts
74
- ?.filter((p) => p.thought)
75
- .map((p) => p.text)
76
- .join("\n") || null;
77
68
  const content = candidate?.content?.parts
78
- ?.filter((p) => !p.thought && p.text)
69
+ ?.filter((p) => p.text)
79
70
  .map((p) => p.text)
80
71
  .join("\n") || null;
81
72
  const tool_calls = candidate?.content?.parts
@@ -98,14 +89,7 @@ export class GeminiChat {
98
89
  const calculatedUsage = usage
99
90
  ? ModelRegistry.calculateCost(usage, request.model, "gemini")
100
91
  : undefined;
101
- const thinkingResult = reasoningText ? { text: reasoningText } : undefined;
102
- return {
103
- content,
104
- tool_calls,
105
- usage: calculatedUsage,
106
- thinking: thinkingResult,
107
- reasoning: reasoningText
108
- };
92
+ return { content, tool_calls, usage: calculatedUsage };
109
93
  }
110
94
  sanitizeSchema(schema) {
111
95
  if (typeof schema !== "object" || schema === null)
@@ -117,10 +101,9 @@ export class GeminiChat {
117
101
  delete sanitized.$id;
118
102
  delete sanitized.definitions;
119
103
  // Recursively sanitize
120
- if (sanitized.properties && typeof sanitized.properties === "object") {
121
- const props = sanitized.properties;
122
- for (const key in props) {
123
- props[key] = this.sanitizeSchema(props[key]);
104
+ if (sanitized.properties) {
105
+ for (const key in sanitized.properties) {
106
+ sanitized.properties[key] = this.sanitizeSchema(sanitized.properties[key]);
124
107
  }
125
108
  }
126
109
  if (sanitized.items) {
@@ -1 +1 @@
1
- {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/ollama/Capabilities.ts"],"names":[],"mappings":"AAEA,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAYhC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKvD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAc/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAK9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKlD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAIpD"}
1
+ {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/ollama/Capabilities.ts"],"names":[],"mappings":"AAEA,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAYhC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKvD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAc/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKlD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAIpD"}
@@ -27,7 +27,10 @@ export class OllamaCapabilities {
27
27
  }
28
28
  static supportsTools(modelId) {
29
29
  const model = this.findModel(modelId);
30
- return model?.capabilities?.includes("tools") || false;
30
+ if (model?.capabilities?.includes("tools"))
31
+ return true;
32
+ // Fallback heuristics for models not in registry
33
+ return /gpt-|claude|gemini|deepseek|llama/.test(modelId.toLowerCase());
31
34
  }
32
35
  static supportsStructuredOutput(modelId) {
33
36
  const model = this.findModel(modelId);
@@ -22,5 +22,6 @@ export declare class Capabilities {
22
22
  static normalizeTemperature(temperature: number | undefined, modelId: string): number | undefined | null;
23
23
  static formatDisplayName(modelId: string): string;
24
24
  static getPricing(modelId: string): ModelPricing | undefined;
25
+ private static findModel;
25
26
  }
26
27
  //# sourceMappingURL=Capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOnD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOlD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItD,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,YAAY,CACjB,OAAO,EAAE,MAAM,GAEb,YAAY,GACZ,OAAO,GACP,YAAY,GACZ,OAAO,GACP,MAAM,GACN,qBAAqB,GACrB,cAAc;IAWlB,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAiB5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAsBjD,MAAM,CAAC,oBAAoB,CACzB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,GAAG,IAAI;IAM5B,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAOjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAG7D"}
1
+ {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOnD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOlD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItD,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,YAAY,CACjB,OAAO,EAAE,MAAM,GAEb,YAAY,GACZ,OAAO,GACP,YAAY,GACZ,OAAO,GACP,MAAM,GACN,qBAAqB,GACrB,cAAc;IAWlB,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAiB5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAsBjD,MAAM,CAAC,oBAAoB,CACzB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,GAAG,IAAI;IAM5B,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAOjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}