@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.
- package/README.md +9 -8
- package/dist/aliases.d.ts +216 -0
- package/dist/aliases.d.ts.map +1 -1
- package/dist/aliases.js +241 -25
- package/dist/chat/Chat.d.ts +8 -4
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +33 -5
- package/dist/chat/ChatResponse.d.ts +28 -3
- package/dist/chat/ChatResponse.d.ts.map +1 -1
- package/dist/chat/ChatResponse.js +79 -6
- package/dist/chat/ChatStream.d.ts.map +1 -1
- package/dist/chat/ChatStream.js +13 -1
- package/dist/chat/Content.d.ts +7 -0
- package/dist/chat/Content.d.ts.map +1 -1
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +58 -6
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -0
- package/dist/errors/index.d.ts +20 -2
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +31 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +3 -2
- package/dist/models/ModelRegistry.d.ts.map +1 -1
- package/dist/models/ModelRegistry.js +4 -2
- package/dist/models/PricingRegistry.js +3 -3
- package/dist/models/models.json +16696 -0
- package/dist/providers/Provider.d.ts +5 -0
- package/dist/providers/Provider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.js +2 -1
- package/dist/providers/anthropic/Capabilities.d.ts +1 -0
- package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
- package/dist/providers/anthropic/Capabilities.js +8 -5
- package/dist/providers/anthropic/Chat.d.ts.map +1 -1
- package/dist/providers/anthropic/Chat.js +2 -1
- package/dist/providers/anthropic/Errors.d.ts.map +1 -1
- package/dist/providers/anthropic/Errors.js +15 -1
- package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
- package/dist/providers/anthropic/Streaming.js +19 -3
- package/dist/providers/bedrock/BedrockProvider.d.ts +53 -0
- package/dist/providers/bedrock/BedrockProvider.d.ts.map +1 -0
- package/dist/providers/bedrock/BedrockProvider.js +107 -0
- package/dist/providers/bedrock/Capabilities.d.ts +50 -0
- package/dist/providers/bedrock/Capabilities.d.ts.map +1 -0
- package/dist/providers/bedrock/Capabilities.js +233 -0
- package/dist/providers/bedrock/Chat.d.ts +26 -0
- package/dist/providers/bedrock/Chat.d.ts.map +1 -0
- package/dist/providers/bedrock/Chat.js +152 -0
- package/dist/providers/bedrock/Embeddings.d.ts +22 -0
- package/dist/providers/bedrock/Embeddings.d.ts.map +1 -0
- package/dist/providers/bedrock/Embeddings.js +100 -0
- package/dist/providers/bedrock/Errors.d.ts +2 -0
- package/dist/providers/bedrock/Errors.d.ts.map +1 -0
- package/dist/providers/bedrock/Errors.js +51 -0
- package/dist/providers/bedrock/Image.d.ts +33 -0
- package/dist/providers/bedrock/Image.d.ts.map +1 -0
- package/dist/providers/bedrock/Image.js +154 -0
- package/dist/providers/bedrock/Models.d.ts +34 -0
- package/dist/providers/bedrock/Models.d.ts.map +1 -0
- package/dist/providers/bedrock/Models.js +131 -0
- package/dist/providers/bedrock/Moderation.d.ts +23 -0
- package/dist/providers/bedrock/Moderation.d.ts.map +1 -0
- package/dist/providers/bedrock/Moderation.js +138 -0
- package/dist/providers/bedrock/Streaming.d.ts +21 -0
- package/dist/providers/bedrock/Streaming.d.ts.map +1 -0
- package/dist/providers/bedrock/Streaming.js +239 -0
- package/dist/providers/bedrock/config.d.ts +57 -0
- package/dist/providers/bedrock/config.d.ts.map +1 -0
- package/dist/providers/bedrock/config.js +33 -0
- package/dist/providers/bedrock/index.d.ts +8 -0
- package/dist/providers/bedrock/index.d.ts.map +1 -0
- package/dist/providers/bedrock/index.js +30 -0
- package/dist/providers/bedrock/mapper.d.ts +37 -0
- package/dist/providers/bedrock/mapper.d.ts.map +1 -0
- package/dist/providers/bedrock/mapper.js +204 -0
- package/dist/providers/bedrock/types.d.ts +179 -0
- package/dist/providers/bedrock/types.d.ts.map +1 -0
- package/dist/providers/bedrock/types.js +7 -0
- package/dist/providers/deepseek/Capabilities.d.ts +3 -2
- package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
- package/dist/providers/deepseek/Capabilities.js +19 -5
- package/dist/providers/deepseek/Chat.d.ts.map +1 -1
- package/dist/providers/deepseek/Chat.js +2 -2
- package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/deepseek/DeepSeekProvider.js +2 -1
- package/dist/providers/deepseek/Errors.d.ts +2 -0
- package/dist/providers/deepseek/Errors.d.ts.map +1 -0
- package/dist/providers/deepseek/Errors.js +45 -0
- package/dist/providers/deepseek/Streaming.d.ts.map +1 -1
- package/dist/providers/deepseek/Streaming.js +13 -2
- package/dist/providers/gemini/Capabilities.d.ts +1 -0
- package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
- package/dist/providers/gemini/Capabilities.js +9 -6
- package/dist/providers/gemini/Chat.d.ts.map +1 -1
- package/dist/providers/gemini/Chat.js +6 -23
- package/dist/providers/gemini/Errors.d.ts.map +1 -1
- package/dist/providers/gemini/Errors.js +13 -1
- package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/gemini/GeminiProvider.js +2 -1
- package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
- package/dist/providers/ollama/Capabilities.js +4 -1
- package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
- package/dist/providers/ollama/OllamaProvider.js +2 -2
- package/dist/providers/openai/Capabilities.d.ts +1 -0
- package/dist/providers/openai/Capabilities.d.ts.map +1 -1
- package/dist/providers/openai/Capabilities.js +14 -11
- package/dist/providers/openai/Errors.d.ts.map +1 -1
- package/dist/providers/openai/Errors.js +31 -5
- package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/openai/OpenAIProvider.js +2 -1
- package/dist/providers/openai/Streaming.d.ts.map +1 -1
- package/dist/providers/openai/Streaming.js +10 -0
- package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/openrouter/OpenRouterProvider.js +2 -1
- package/dist/providers/registry.d.ts +5 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +12 -3
- package/dist/utils/AwsSigV4.d.ts +51 -0
- package/dist/utils/AwsSigV4.d.ts.map +1 -0
- package/dist/utils/AwsSigV4.js +209 -0
- package/dist/utils/json.d.ts +6 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/package.json +1 -1
- package/dist/models/models.d.ts +0 -327
- package/dist/models/models.d.ts.map +0 -1
- 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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"}
|
|
@@ -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(
|
|
6
|
+
static supportsVision(modelId: string): boolean;
|
|
7
7
|
static supportsTools(modelId: string): boolean;
|
|
8
8
|
static supportsStructuredOutput(modelId: string): boolean;
|
|
9
|
-
static supportsEmbeddings(
|
|
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,
|
|
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(
|
|
30
|
-
|
|
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
|
-
|
|
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(
|
|
39
|
-
|
|
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;
|
|
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
|
-
|
|
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;
|
|
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 ??
|
|
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 @@
|
|
|
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;
|
|
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
|
-
|
|
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;
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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;
|
|
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:
|
|
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) =>
|
|
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
|
-
|
|
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
|
|
121
|
-
const
|
|
122
|
-
|
|
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":"
|
|
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;
|
|
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 ??
|
|
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;
|
|
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
|
-
|
|
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);
|