@node-llm/core 1.7.0 → 1.9.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 (132) hide show
  1. package/README.md +9 -8
  2. package/dist/aliases.d.ts +216 -0
  3. package/dist/aliases.d.ts.map +1 -1
  4. package/dist/aliases.js +241 -25
  5. package/dist/chat/Chat.d.ts +8 -4
  6. package/dist/chat/Chat.d.ts.map +1 -1
  7. package/dist/chat/Chat.js +33 -5
  8. package/dist/chat/ChatResponse.d.ts +28 -3
  9. package/dist/chat/ChatResponse.d.ts.map +1 -1
  10. package/dist/chat/ChatResponse.js +79 -6
  11. package/dist/chat/ChatStream.d.ts.map +1 -1
  12. package/dist/chat/ChatStream.js +13 -1
  13. package/dist/chat/Content.d.ts +7 -0
  14. package/dist/chat/Content.d.ts.map +1 -1
  15. package/dist/config.d.ts +28 -0
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +58 -6
  18. package/dist/constants.d.ts +6 -0
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +6 -0
  21. package/dist/errors/index.d.ts +20 -2
  22. package/dist/errors/index.d.ts.map +1 -1
  23. package/dist/errors/index.js +31 -3
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/llm.d.ts.map +1 -1
  27. package/dist/llm.js +3 -2
  28. package/dist/models/ModelRegistry.d.ts.map +1 -1
  29. package/dist/models/ModelRegistry.js +4 -2
  30. package/dist/models/PricingRegistry.js +3 -3
  31. package/dist/models/models.json +16696 -0
  32. package/dist/providers/Provider.d.ts +5 -0
  33. package/dist/providers/Provider.d.ts.map +1 -1
  34. package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
  35. package/dist/providers/anthropic/AnthropicProvider.js +2 -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 +8 -5
  39. package/dist/providers/anthropic/Chat.d.ts.map +1 -1
  40. package/dist/providers/anthropic/Chat.js +2 -1
  41. package/dist/providers/anthropic/Errors.d.ts.map +1 -1
  42. package/dist/providers/anthropic/Errors.js +15 -1
  43. package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
  44. package/dist/providers/anthropic/Streaming.js +19 -3
  45. package/dist/providers/bedrock/BedrockProvider.d.ts +53 -0
  46. package/dist/providers/bedrock/BedrockProvider.d.ts.map +1 -0
  47. package/dist/providers/bedrock/BedrockProvider.js +107 -0
  48. package/dist/providers/bedrock/Capabilities.d.ts +50 -0
  49. package/dist/providers/bedrock/Capabilities.d.ts.map +1 -0
  50. package/dist/providers/bedrock/Capabilities.js +233 -0
  51. package/dist/providers/bedrock/Chat.d.ts +26 -0
  52. package/dist/providers/bedrock/Chat.d.ts.map +1 -0
  53. package/dist/providers/bedrock/Chat.js +152 -0
  54. package/dist/providers/bedrock/Embeddings.d.ts +22 -0
  55. package/dist/providers/bedrock/Embeddings.d.ts.map +1 -0
  56. package/dist/providers/bedrock/Embeddings.js +100 -0
  57. package/dist/providers/bedrock/Errors.d.ts +2 -0
  58. package/dist/providers/bedrock/Errors.d.ts.map +1 -0
  59. package/dist/providers/bedrock/Errors.js +51 -0
  60. package/dist/providers/bedrock/Image.d.ts +33 -0
  61. package/dist/providers/bedrock/Image.d.ts.map +1 -0
  62. package/dist/providers/bedrock/Image.js +154 -0
  63. package/dist/providers/bedrock/Models.d.ts +34 -0
  64. package/dist/providers/bedrock/Models.d.ts.map +1 -0
  65. package/dist/providers/bedrock/Models.js +131 -0
  66. package/dist/providers/bedrock/Moderation.d.ts +23 -0
  67. package/dist/providers/bedrock/Moderation.d.ts.map +1 -0
  68. package/dist/providers/bedrock/Moderation.js +138 -0
  69. package/dist/providers/bedrock/Streaming.d.ts +21 -0
  70. package/dist/providers/bedrock/Streaming.d.ts.map +1 -0
  71. package/dist/providers/bedrock/Streaming.js +239 -0
  72. package/dist/providers/bedrock/config.d.ts +57 -0
  73. package/dist/providers/bedrock/config.d.ts.map +1 -0
  74. package/dist/providers/bedrock/config.js +33 -0
  75. package/dist/providers/bedrock/index.d.ts +8 -0
  76. package/dist/providers/bedrock/index.d.ts.map +1 -0
  77. package/dist/providers/bedrock/index.js +30 -0
  78. package/dist/providers/bedrock/mapper.d.ts +37 -0
  79. package/dist/providers/bedrock/mapper.d.ts.map +1 -0
  80. package/dist/providers/bedrock/mapper.js +204 -0
  81. package/dist/providers/bedrock/types.d.ts +179 -0
  82. package/dist/providers/bedrock/types.d.ts.map +1 -0
  83. package/dist/providers/bedrock/types.js +7 -0
  84. package/dist/providers/deepseek/Capabilities.d.ts +3 -2
  85. package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
  86. package/dist/providers/deepseek/Capabilities.js +19 -5
  87. package/dist/providers/deepseek/Chat.d.ts.map +1 -1
  88. package/dist/providers/deepseek/Chat.js +2 -2
  89. package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
  90. package/dist/providers/deepseek/DeepSeekProvider.js +2 -1
  91. package/dist/providers/deepseek/Errors.d.ts +2 -0
  92. package/dist/providers/deepseek/Errors.d.ts.map +1 -0
  93. package/dist/providers/deepseek/Errors.js +45 -0
  94. package/dist/providers/deepseek/Streaming.d.ts.map +1 -1
  95. package/dist/providers/deepseek/Streaming.js +13 -2
  96. package/dist/providers/gemini/Capabilities.d.ts +1 -0
  97. package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
  98. package/dist/providers/gemini/Capabilities.js +9 -6
  99. package/dist/providers/gemini/Chat.d.ts.map +1 -1
  100. package/dist/providers/gemini/Chat.js +6 -23
  101. package/dist/providers/gemini/Errors.d.ts.map +1 -1
  102. package/dist/providers/gemini/Errors.js +13 -1
  103. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
  104. package/dist/providers/gemini/GeminiProvider.js +2 -1
  105. package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
  106. package/dist/providers/ollama/Capabilities.js +4 -1
  107. package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
  108. package/dist/providers/ollama/OllamaProvider.js +2 -2
  109. package/dist/providers/openai/Capabilities.d.ts +1 -0
  110. package/dist/providers/openai/Capabilities.d.ts.map +1 -1
  111. package/dist/providers/openai/Capabilities.js +14 -11
  112. package/dist/providers/openai/Errors.d.ts.map +1 -1
  113. package/dist/providers/openai/Errors.js +31 -5
  114. package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
  115. package/dist/providers/openai/OpenAIProvider.js +2 -1
  116. package/dist/providers/openai/Streaming.d.ts.map +1 -1
  117. package/dist/providers/openai/Streaming.js +10 -0
  118. package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -1
  119. package/dist/providers/openrouter/OpenRouterProvider.js +2 -1
  120. package/dist/providers/registry.d.ts +5 -1
  121. package/dist/providers/registry.d.ts.map +1 -1
  122. package/dist/providers/registry.js +12 -3
  123. package/dist/utils/AwsSigV4.d.ts +51 -0
  124. package/dist/utils/AwsSigV4.d.ts.map +1 -0
  125. package/dist/utils/AwsSigV4.js +209 -0
  126. package/dist/utils/json.d.ts +6 -0
  127. package/dist/utils/json.d.ts.map +1 -0
  128. package/dist/utils/json.js +43 -0
  129. package/package.json +1 -1
  130. package/dist/models/models.d.ts +0 -327
  131. package/dist/models/models.d.ts.map +0 -1
  132. package/dist/models/models.js +0 -11138
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAS,MAAM,gBAAgB,CAAC;AAgClE,qBAAa,YAAY;IAErB,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;CAoH3D"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAS,MAAM,gBAAgB,CAAC;AAiClE,qBAAa,YAAY;IAErB,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;CAmH3D"}
@@ -1,5 +1,6 @@
1
1
  import { ModelRegistry } from "../../models/ModelRegistry.js";
2
2
  import { logger } from "../../utils/logger.js";
3
+ import { handleDeepSeekError } from "./Errors.js";
3
4
  import { mapSystemMessages } from "../utils.js";
4
5
  import { fetchWithTimeout } from "../../utils/fetch.js";
5
6
  export class DeepSeekChat {
@@ -63,8 +64,7 @@ export class DeepSeekChat {
63
64
  body: JSON.stringify(body)
64
65
  }, requestTimeout);
65
66
  if (!response.ok) {
66
- const errorText = await response.text();
67
- throw new Error(`DeepSeek API error: ${response.status} - ${errorText}`);
67
+ await handleDeepSeekError(response, model);
68
68
  }
69
69
  const json = (await response.json());
70
70
  logger.logResponse("DeepSeek", response.status, response.statusText, json);
@@ -1 +1 @@
1
- {"version":3,"file":"DeepSeekProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/DeepSeekProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAiB,SAAQ,YAAa,YAAW,QAAQ;IAmBxD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAlBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAExC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;wCACD,MAAM;kCACZ,MAAM;MAChC;gBAE2B,OAAO,EAAE,uBAAuB;IAQtD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAKzC"}
1
+ {"version":3,"file":"DeepSeekProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/DeepSeekProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAiB,SAAQ,YAAa,YAAW,QAAQ;IAmBxD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAlBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAExC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;wCACD,MAAM;kCACZ,MAAM;MAChC;gBAE2B,OAAO,EAAE,uBAAuB;IAQtD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAKzC"}
@@ -1,4 +1,5 @@
1
1
  import { BaseProvider } from "../BaseProvider.js";
2
+ import { DEFAULT_DEEPSEEK_BASE_URL } from "../../constants.js";
2
3
  import { DeepSeekChat } from "./Chat.js";
3
4
  import { DeepSeekModels } from "./Models.js";
4
5
  import { DeepSeekStreaming } from "./Streaming.js";
@@ -24,7 +25,7 @@ export class DeepSeekProvider extends BaseProvider {
24
25
  constructor(options) {
25
26
  super();
26
27
  this.options = options;
27
- this.baseUrl = options.baseUrl ?? "https://api.deepseek.com";
28
+ this.baseUrl = options.baseUrl ?? DEFAULT_DEEPSEEK_BASE_URL;
28
29
  this.chatHandler = new DeepSeekChat(this.baseUrl, options.apiKey);
29
30
  this.streamingHandler = new DeepSeekStreaming(this.baseUrl, options.apiKey);
30
31
  this.modelsHandler = new DeepSeekModels(this.baseUrl, options.apiKey);
@@ -0,0 +1,2 @@
1
+ export declare function handleDeepSeekError(response: Response, model?: string): Promise<never>;
2
+ //# sourceMappingURL=Errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/Errors.ts"],"names":[],"mappings":"AAaA,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAkD5F"}
@@ -0,0 +1,45 @@
1
+ import { BadRequestError, ContextWindowExceededError, InsufficientQuotaError, InvalidModelError, NotFoundError, AuthenticationError, RateLimitError, ServerError, APIError } from "../../errors/index.js";
2
+ export async function handleDeepSeekError(response, model) {
3
+ const status = response.status;
4
+ let body;
5
+ let message = `DeepSeek error (${status})`;
6
+ try {
7
+ body = await response.json();
8
+ if (body && typeof body === "object" && "error" in body) {
9
+ const err = body.error;
10
+ if (err && err.message) {
11
+ message = err.message;
12
+ }
13
+ }
14
+ }
15
+ catch {
16
+ body = await response.text().catch(() => "Unknown error");
17
+ message = `DeepSeek error (${status}): ${body}`;
18
+ }
19
+ const provider = "deepseek";
20
+ if (status === 400) {
21
+ if (message.includes("context") || message.includes("length") || message.includes("tokens")) {
22
+ throw new ContextWindowExceededError(message, body, provider, model);
23
+ }
24
+ throw new BadRequestError(message, body, provider, model);
25
+ }
26
+ if (status === 401 || status === 403) {
27
+ throw new AuthenticationError(message, status, body, provider);
28
+ }
29
+ if (status === 404) {
30
+ if (message.includes("model")) {
31
+ throw new InvalidModelError(message, body, provider, model);
32
+ }
33
+ throw new NotFoundError(message, status, body, provider, model);
34
+ }
35
+ if (status === 402 || status === 429) {
36
+ if (message.includes("quota") || message.includes("balance") || message.includes("credit")) {
37
+ throw new InsufficientQuotaError(message, body, provider, model);
38
+ }
39
+ throw new RateLimitError(message, body, provider, model);
40
+ }
41
+ if (status >= 500) {
42
+ throw new ServerError(message, status, body, provider, model);
43
+ }
44
+ throw new APIError(message, status, body, provider, model);
45
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMxD,qBAAa,iBAAiB;IAE1B,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;CAkL9F"}
1
+ {"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/deepseek/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAOxD,qBAAa,iBAAiB;IAE1B,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;CA8L9F"}
@@ -1,5 +1,6 @@
1
1
  import { APIError } from "../../errors/index.js";
2
2
  import { logger } from "../../utils/logger.js";
3
+ import { handleDeepSeekError } from "./Errors.js";
3
4
  import { mapSystemMessages } from "../utils.js";
4
5
  import { fetchWithTimeout } from "../../utils/fetch.js";
5
6
  export class DeepSeekStreaming {
@@ -25,6 +26,8 @@ export class DeepSeekStreaming {
25
26
  body.tools = tools;
26
27
  if (response_format)
27
28
  body.response_format = response_format;
29
+ // DeepSeek (and most OpenAI compatible) supports include_usage
30
+ body.stream_options = { include_usage: true };
28
31
  let done = false;
29
32
  // Track tool calls being built across chunks
30
33
  const toolCallsMap = new Map();
@@ -42,8 +45,7 @@ export class DeepSeekStreaming {
42
45
  signal: abortController.signal
43
46
  }, requestTimeout);
44
47
  if (!response.ok) {
45
- const errorText = await response.text();
46
- throw new Error(`DeepSeek API error: ${response.status} - ${errorText}`);
48
+ await handleDeepSeekError(response, model);
47
49
  }
48
50
  logger.debug("DeepSeek streaming started", {
49
51
  status: response.status,
@@ -131,6 +133,15 @@ export class DeepSeekStreaming {
131
133
  }
132
134
  }
133
135
  }
136
+ // Handle usage
137
+ if (json.usage) {
138
+ const usage = {
139
+ input_tokens: json.usage.prompt_tokens,
140
+ output_tokens: json.usage.completion_tokens,
141
+ total_tokens: json.usage.total_tokens
142
+ };
143
+ yield { content: "", usage };
144
+ }
134
145
  }
135
146
  catch (e) {
136
147
  // Re-throw APIError
@@ -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":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Errors.ts"],"names":[],"mappings":"AASA,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CA0C1F"}
1
+ {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Errors.ts"],"names":[],"mappings":"AAaA,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAuD1F"}
@@ -1,4 +1,4 @@
1
- import { BadRequestError, AuthenticationError, RateLimitError, ServerError, ServiceUnavailableError, APIError } from "../../errors/index.js";
1
+ import { BadRequestError, ContextWindowExceededError, InsufficientQuotaError, InvalidModelError, NotFoundError, AuthenticationError, RateLimitError, ServerError, ServiceUnavailableError, APIError } from "../../errors/index.js";
2
2
  export async function handleGeminiError(response, model) {
3
3
  const status = response.status;
4
4
  let body;
@@ -19,12 +19,24 @@ export async function handleGeminiError(response, model) {
19
19
  }
20
20
  const provider = "gemini";
21
21
  if (status === 400) {
22
+ if (message.includes("limit") || message.includes("context") || message.includes("token")) {
23
+ throw new ContextWindowExceededError(message, body, provider, model);
24
+ }
22
25
  throw new BadRequestError(message, body, provider, model);
23
26
  }
24
27
  if (status === 401 || status === 403) {
25
28
  throw new AuthenticationError(message, status, body, provider);
26
29
  }
30
+ if (status === 404) {
31
+ if (message.includes("model")) {
32
+ throw new InvalidModelError(message, body, provider, model);
33
+ }
34
+ throw new NotFoundError(message, status, body, provider, model);
35
+ }
27
36
  if (status === 429) {
37
+ if (message.includes("quota")) {
38
+ throw new InsufficientQuotaError(message, body, provider, model);
39
+ }
28
40
  throw new RateLimitError(message, body, provider, model);
29
41
  }
30
42
  if (status === 502 || status === 503 || status === 504) {
@@ -1 +1 @@
1
- {"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/GeminiProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,QAAQ;IAsBtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IArBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsB;IAEpD,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;oCACN,MAAM;wCACF,MAAM;kCACZ,MAAM;MAChC;gBAE2B,OAAO,EAAE,qBAAqB;IAWpD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI5D,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAKhF"}
1
+ {"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/GeminiProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,QAAQ;IAsBtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IArBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsB;IAEpD,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;oCACN,MAAM;wCACF,MAAM;kCACZ,MAAM;MAChC;gBAE2B,OAAO,EAAE,qBAAqB;IAWpD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI5D,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAKhF"}
@@ -1,4 +1,5 @@
1
1
  import { BaseProvider } from "../BaseProvider.js";
2
+ import { DEFAULT_GEMINI_BASE_URL } from "../../constants.js";
2
3
  import { Capabilities } from "./Capabilities.js";
3
4
  import { GeminiChat } from "./Chat.js";
4
5
  import { GeminiStreaming } from "./Streaming.js";
@@ -30,7 +31,7 @@ export class GeminiProvider extends BaseProvider {
30
31
  constructor(options) {
31
32
  super();
32
33
  this.options = options;
33
- this.baseUrl = options.baseUrl ?? "https://generativelanguage.googleapis.com/v1beta";
34
+ this.baseUrl = options.baseUrl ?? DEFAULT_GEMINI_BASE_URL;
34
35
  this.chatHandler = new GeminiChat(this.baseUrl, options.apiKey);
35
36
  this.streamingHandler = new GeminiStreaming(this.baseUrl, options.apiKey);
36
37
  this.modelsHandler = new GeminiModels(this.baseUrl, options.apiKey);
@@ -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);