@node-llm/core 1.18.0 → 1.19.1
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 +14 -12
- package/dist/agent/Agent.d.ts +17 -3
- package/dist/agent/Agent.d.ts.map +1 -1
- package/dist/agent/Agent.js +11 -0
- package/dist/aliases.d.ts +341 -316
- package/dist/aliases.d.ts.map +1 -1
- package/dist/aliases.js +467 -442
- package/dist/chat/Chat.d.ts +12 -5
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +45 -13
- package/dist/chat/ChatOptions.d.ts +17 -0
- package/dist/chat/ChatOptions.d.ts.map +1 -1
- package/dist/chat/ChatResponse.d.ts +5 -0
- package/dist/chat/ChatResponse.d.ts.map +1 -1
- package/dist/chat/ChatResponse.js +12 -4
- package/dist/chat/ChatStream.d.ts.map +1 -1
- package/dist/chat/ChatStream.js +20 -10
- package/dist/chat/PromptCache.d.ts +7 -0
- package/dist/chat/PromptCache.d.ts.map +1 -0
- package/dist/chat/PromptCache.js +7 -0
- package/dist/chat/Temperature.d.ts +7 -0
- package/dist/chat/Temperature.d.ts.map +1 -0
- package/dist/chat/Temperature.js +17 -0
- package/dist/chat/Tool.d.ts +28 -3
- package/dist/chat/Tool.d.ts.map +1 -1
- package/dist/chat/Tool.js +28 -2
- package/dist/chat/ToolCallOutcome.d.ts +12 -0
- package/dist/chat/ToolCallOutcome.d.ts.map +1 -1
- package/dist/chat/ToolCallOutcome.js +14 -0
- package/dist/chat/ToolResultWindow.d.ts +16 -0
- package/dist/chat/ToolResultWindow.d.ts.map +1 -0
- package/dist/chat/ToolResultWindow.js +25 -0
- package/dist/config.d.ts +30 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +66 -30
- package/dist/errors/billing.d.ts +7 -0
- package/dist/errors/billing.d.ts.map +1 -0
- package/dist/errors/billing.js +24 -0
- package/dist/errors/index.d.ts +28 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +32 -0
- package/dist/executor/Executor.d.ts.map +1 -1
- package/dist/executor/Executor.js +5 -3
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/llm.d.ts +2 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +8 -2
- package/dist/models/ModelRegistry.d.ts +12 -1
- package/dist/models/ModelRegistry.d.ts.map +1 -1
- package/dist/models/ModelRegistry.js +22 -2
- package/dist/models/models.json +11900 -4568
- package/dist/models/types.d.ts +14 -1
- package/dist/models/types.d.ts.map +1 -1
- package/dist/providers/Provider.d.ts +23 -1
- package/dist/providers/Provider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.d.ts +2 -0
- package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.js +2 -0
- 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 +3 -0
- package/dist/providers/anthropic/Chat.d.ts.map +1 -1
- package/dist/providers/anthropic/Chat.js +7 -75
- package/dist/providers/anthropic/Errors.d.ts.map +1 -1
- package/dist/providers/anthropic/Errors.js +4 -3
- package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
- package/dist/providers/anthropic/Streaming.js +4 -66
- package/dist/providers/anthropic/Utils.d.ts +33 -1
- package/dist/providers/anthropic/Utils.d.ts.map +1 -1
- package/dist/providers/anthropic/Utils.js +114 -0
- package/dist/providers/anthropic/types.d.ts +17 -3
- package/dist/providers/anthropic/types.d.ts.map +1 -1
- package/dist/providers/azure/AzureProvider.d.ts +54 -0
- package/dist/providers/azure/AzureProvider.d.ts.map +1 -0
- package/dist/providers/azure/AzureProvider.js +110 -0
- package/dist/providers/azure/Capabilities.d.ts +16 -0
- package/dist/providers/azure/Capabilities.d.ts.map +1 -0
- package/dist/providers/azure/Capabilities.js +36 -0
- package/dist/providers/azure/Embedding.d.ts +11 -0
- package/dist/providers/azure/Embedding.d.ts.map +1 -0
- package/dist/providers/azure/Embedding.js +23 -0
- package/dist/providers/azure/Models.d.ts +18 -0
- package/dist/providers/azure/Models.d.ts.map +1 -0
- package/dist/providers/azure/Models.js +29 -0
- package/dist/providers/azure/index.d.ts +5 -0
- package/dist/providers/azure/index.d.ts.map +1 -0
- package/dist/providers/azure/index.js +28 -0
- package/dist/providers/bedrock/BedrockProvider.d.ts.map +1 -1
- package/dist/providers/bedrock/BedrockProvider.js +1 -0
- package/dist/providers/bedrock/Capabilities.d.ts +1 -0
- package/dist/providers/bedrock/Capabilities.d.ts.map +1 -1
- package/dist/providers/bedrock/Capabilities.js +3 -0
- package/dist/providers/bedrock/Chat.d.ts.map +1 -1
- package/dist/providers/bedrock/Chat.js +6 -2
- package/dist/providers/bedrock/Errors.d.ts.map +1 -1
- package/dist/providers/bedrock/Errors.js +4 -0
- package/dist/providers/bedrock/Streaming.d.ts.map +1 -1
- package/dist/providers/bedrock/Streaming.js +4 -1
- package/dist/providers/deepseek/Capabilities.d.ts +1 -0
- package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
- package/dist/providers/deepseek/Capabilities.js +3 -0
- package/dist/providers/deepseek/Chat.d.ts.map +1 -1
- package/dist/providers/deepseek/Chat.js +3 -2
- package/dist/providers/deepseek/DeepSeekProvider.d.ts +1 -0
- package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/deepseek/DeepSeekProvider.js +1 -0
- package/dist/providers/deepseek/Errors.d.ts.map +1 -1
- package/dist/providers/deepseek/Errors.js +5 -4
- 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 +3 -0
- package/dist/providers/gemini/Chat.d.ts.map +1 -1
- package/dist/providers/gemini/Chat.js +6 -4
- package/dist/providers/gemini/ChatUtils.d.ts.map +1 -1
- package/dist/providers/gemini/ChatUtils.js +2 -1
- package/dist/providers/gemini/Errors.d.ts.map +1 -1
- package/dist/providers/gemini/Errors.js +4 -3
- package/dist/providers/gemini/GeminiProvider.d.ts +1 -0
- package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/gemini/GeminiProvider.js +1 -0
- package/dist/providers/gemini/Streaming.d.ts.map +1 -1
- package/dist/providers/gemini/Streaming.js +3 -2
- package/dist/providers/gemini/types.d.ts +2 -0
- package/dist/providers/gemini/types.d.ts.map +1 -1
- package/dist/providers/mistral/Capabilities.d.ts +1 -0
- package/dist/providers/mistral/Capabilities.d.ts.map +1 -1
- package/dist/providers/mistral/Capabilities.js +3 -0
- package/dist/providers/mistral/Chat.d.ts.map +1 -1
- package/dist/providers/mistral/Chat.js +3 -2
- package/dist/providers/mistral/Errors.d.ts.map +1 -1
- package/dist/providers/mistral/Errors.js +4 -3
- package/dist/providers/mistral/MistralProvider.d.ts +1 -0
- package/dist/providers/mistral/MistralProvider.d.ts.map +1 -1
- package/dist/providers/mistral/MistralProvider.js +1 -0
- package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
- package/dist/providers/ollama/OllamaProvider.js +1 -0
- package/dist/providers/openai/Capabilities.d.ts +6 -0
- package/dist/providers/openai/Capabilities.d.ts.map +1 -1
- package/dist/providers/openai/Capabilities.js +10 -0
- package/dist/providers/openai/Chat.d.ts +3 -0
- package/dist/providers/openai/Chat.d.ts.map +1 -1
- package/dist/providers/openai/Chat.js +26 -7
- package/dist/providers/openai/Embedding.d.ts +2 -0
- package/dist/providers/openai/Embedding.d.ts.map +1 -1
- package/dist/providers/openai/Embedding.js +8 -5
- package/dist/providers/openai/Errors.d.ts.map +1 -1
- package/dist/providers/openai/Errors.js +4 -3
- package/dist/providers/openai/Models.d.ts +10 -0
- package/dist/providers/openai/Models.d.ts.map +1 -1
- package/dist/providers/openai/Models.js +12 -8
- package/dist/providers/openai/OpenAIProvider.d.ts +11 -1
- package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/openai/OpenAIProvider.js +36 -0
- package/dist/providers/openai/Responses.d.ts +30 -0
- package/dist/providers/openai/Responses.d.ts.map +1 -0
- package/dist/providers/openai/Responses.js +176 -0
- package/dist/providers/openai/Streaming.d.ts +2 -0
- package/dist/providers/openai/Streaming.d.ts.map +1 -1
- package/dist/providers/openai/Streaming.js +19 -5
- package/dist/providers/openrouter/Capabilities.d.ts +1 -0
- package/dist/providers/openrouter/Capabilities.d.ts.map +1 -1
- package/dist/providers/openrouter/Capabilities.js +3 -0
- package/dist/providers/openrouter/OpenRouterProvider.d.ts +1 -0
- package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/openrouter/OpenRouterProvider.js +1 -0
- package/dist/providers/registry.d.ts +2 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -1
- package/dist/providers/xai/Capabilities.d.ts +1 -0
- package/dist/providers/xai/Capabilities.d.ts.map +1 -1
- package/dist/providers/xai/Capabilities.js +3 -0
- package/dist/providers/xai/Chat.d.ts.map +1 -1
- package/dist/providers/xai/Chat.js +3 -2
- package/dist/providers/xai/Errors.d.ts.map +1 -1
- package/dist/providers/xai/Errors.js +5 -2
- package/dist/providers/xai/XAIProvider.d.ts +1 -0
- package/dist/providers/xai/XAIProvider.d.ts.map +1 -1
- package/dist/providers/xai/XAIProvider.js +1 -0
- package/dist/schema/Schema.d.ts +3 -3
- package/dist/schema/Schema.d.ts.map +1 -1
- package/dist/schema/to-json-schema.d.ts +2 -2
- package/dist/schema/to-json-schema.d.ts.map +1 -1
- package/dist/schema/to-json-schema.js +3 -8
- package/dist/schema/zod.d.ts +33 -0
- package/dist/schema/zod.d.ts.map +1 -0
- package/dist/schema/zod.js +33 -0
- package/package.json +14 -15
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BadRequestError, ContextWindowExceededError, InsufficientQuotaError, InvalidModelError, NotFoundError, AuthenticationError, RateLimitError, ServerError, APIError } from "../../errors/index.js";
|
|
2
|
+
import { isBillingProblem } from "../../errors/billing.js";
|
|
2
3
|
export async function handleDeepSeekError(response, model) {
|
|
3
4
|
const status = response.status;
|
|
4
5
|
let body;
|
|
@@ -17,6 +18,9 @@ export async function handleDeepSeekError(response, model) {
|
|
|
17
18
|
message = `DeepSeek error (${status}): ${body}`;
|
|
18
19
|
}
|
|
19
20
|
const provider = "deepseek";
|
|
21
|
+
if (isBillingProblem(status, message)) {
|
|
22
|
+
throw new InsufficientQuotaError(message, body, provider, model);
|
|
23
|
+
}
|
|
20
24
|
if (status === 400) {
|
|
21
25
|
if (message.includes("context") || message.includes("length") || message.includes("tokens")) {
|
|
22
26
|
throw new ContextWindowExceededError(message, body, provider, model);
|
|
@@ -32,10 +36,7 @@ export async function handleDeepSeekError(response, model) {
|
|
|
32
36
|
}
|
|
33
37
|
throw new NotFoundError(message, status, body, provider, model);
|
|
34
38
|
}
|
|
35
|
-
if (status ===
|
|
36
|
-
if (message.includes("quota") || message.includes("balance") || message.includes("credit")) {
|
|
37
|
-
throw new InsufficientQuotaError(message, body, provider, model);
|
|
38
|
-
}
|
|
39
|
+
if (status === 429) {
|
|
39
40
|
throw new RateLimitError(message, body, provider, model);
|
|
40
41
|
}
|
|
41
42
|
if (status >= 500) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ModelPricing } from "../../models/types.js";
|
|
2
2
|
export declare class Capabilities {
|
|
3
|
+
static supportsTemperature(modelId: string): boolean;
|
|
3
4
|
static getContextWindow(modelId: string): number | null;
|
|
4
5
|
static getMaxOutputTokens(modelId: string): number | null;
|
|
5
6
|
static supportsVision(modelId: string): boolean;
|
|
@@ -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;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOtD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,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;IAc5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
|
|
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,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOtD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,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;IAc5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { ModelRegistry } from "../../models/ModelRegistry.js";
|
|
2
2
|
import { PricingRegistry } from "../../models/PricingRegistry.js";
|
|
3
3
|
export class Capabilities {
|
|
4
|
+
static supportsTemperature(modelId) {
|
|
5
|
+
return ModelRegistry.supportsTemperature(modelId, "gemini");
|
|
6
|
+
}
|
|
4
7
|
static getContextWindow(modelId) {
|
|
5
8
|
return ModelRegistry.getContextWindow(modelId, "gemini") ?? 32_768;
|
|
6
9
|
}
|
|
@@ -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;IA8J1D,OAAO,CAAC,cAAc;CAuBvB"}
|
|
@@ -28,7 +28,7 @@ export class GeminiChat {
|
|
|
28
28
|
generationConfig.responseJsonSchema = this.sanitizeSchema(request.response_format.json_schema.schema);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
const { model: _model, messages: _messages, tools: _tools, temperature: _temp, max_tokens: _max, response_format: _format, headers: _headers, tool_choice: _choice, parallel_tool_calls: _parallel, requestTimeout, ...rest } = request;
|
|
31
|
+
const { model: _model, messages: _messages, tools: _tools, temperature: _temp, max_tokens: _max, response_format: _format, headers: _headers, tool_choice: _choice, parallel_tool_calls: _parallel, requestTimeout, signal, ...rest } = request;
|
|
32
32
|
const payload = {
|
|
33
33
|
contents,
|
|
34
34
|
generationConfig: {
|
|
@@ -46,7 +46,7 @@ export class GeminiChat {
|
|
|
46
46
|
functionDeclarations: request.tools.map((t) => ({
|
|
47
47
|
name: t.function.name,
|
|
48
48
|
description: t.function.description,
|
|
49
|
-
|
|
49
|
+
parametersJsonSchema: t.function.parameters
|
|
50
50
|
}))
|
|
51
51
|
}
|
|
52
52
|
];
|
|
@@ -85,7 +85,8 @@ export class GeminiChat {
|
|
|
85
85
|
headers: {
|
|
86
86
|
"Content-Type": "application/json"
|
|
87
87
|
},
|
|
88
|
-
body: JSON.stringify(payload)
|
|
88
|
+
body: JSON.stringify(payload),
|
|
89
|
+
signal
|
|
89
90
|
}, requestTimeout);
|
|
90
91
|
if (!response.ok) {
|
|
91
92
|
await handleGeminiError(response, request.model);
|
|
@@ -106,7 +107,8 @@ export class GeminiChat {
|
|
|
106
107
|
function: {
|
|
107
108
|
name: p.functionCall.name,
|
|
108
109
|
arguments: JSON.stringify(p.functionCall.args)
|
|
109
|
-
}
|
|
110
|
+
},
|
|
111
|
+
...(p.thoughtSignature && { thought_signature: p.thoughtSignature })
|
|
110
112
|
}));
|
|
111
113
|
const attachments = contentParts
|
|
112
114
|
.filter((p) => p.inlineData)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatUtils.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/ChatUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGvD,qBAAa,eAAe;WACb,eAAe,CAC1B,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,sBAAsB,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatUtils.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/ChatUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGvD,qBAAa,eAAe;WACb,eAAe,CAC1B,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,sBAAsB,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CA0FhF"}
|
|
@@ -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":"AAcA,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAwD1F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BadRequestError, ContextWindowExceededError, InsufficientQuotaError, InvalidModelError, NotFoundError, AuthenticationError, RateLimitError, ServerError, ServiceUnavailableError, APIError } from "../../errors/index.js";
|
|
2
|
+
import { isBillingProblem } from "../../errors/billing.js";
|
|
2
3
|
export async function handleGeminiError(response, model) {
|
|
3
4
|
const status = response.status;
|
|
4
5
|
let body;
|
|
@@ -18,6 +19,9 @@ export async function handleGeminiError(response, model) {
|
|
|
18
19
|
message = `Gemini error (${status}): ${body}`;
|
|
19
20
|
}
|
|
20
21
|
const provider = "gemini";
|
|
22
|
+
if (isBillingProblem(status, message)) {
|
|
23
|
+
throw new InsufficientQuotaError(message, body, provider, model);
|
|
24
|
+
}
|
|
21
25
|
if (status === 400) {
|
|
22
26
|
if (message.includes("limit") || message.includes("context") || message.includes("token")) {
|
|
23
27
|
throw new ContextWindowExceededError(message, body, provider, model);
|
|
@@ -34,9 +38,6 @@ export async function handleGeminiError(response, model) {
|
|
|
34
38
|
throw new NotFoundError(message, status, body, provider, model);
|
|
35
39
|
}
|
|
36
40
|
if (status === 429) {
|
|
37
|
-
if (message.includes("quota")) {
|
|
38
|
-
throw new InsufficientQuotaError(message, body, provider, model);
|
|
39
|
-
}
|
|
40
41
|
throw new RateLimitError(message, body, provider, model);
|
|
41
42
|
}
|
|
42
43
|
if (status === 502 || status === 503 || status === 504) {
|
|
@@ -23,6 +23,7 @@ export declare class GeminiProvider extends BaseProvider implements Provider {
|
|
|
23
23
|
supportsModeration: (model: string) => boolean;
|
|
24
24
|
supportsReasoning: (_model: string) => boolean;
|
|
25
25
|
supportsDeveloperRole: (_model: string) => boolean;
|
|
26
|
+
supportsTemperature: (model: string) => boolean;
|
|
26
27
|
getContextWindow: (model: string) => number | null;
|
|
27
28
|
};
|
|
28
29
|
constructor(options: GeminiProviderOptions);
|
|
@@ -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;AAUlD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,QAAQ;
|
|
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;IAuBtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAtBpC,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;qCACT,MAAM;kCACT,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"}
|
|
@@ -26,6 +26,7 @@ export class GeminiProvider extends BaseProvider {
|
|
|
26
26
|
supportsModeration: (model) => Capabilities.supportsModeration(model),
|
|
27
27
|
supportsReasoning: (_model) => false,
|
|
28
28
|
supportsDeveloperRole: (_model) => true,
|
|
29
|
+
supportsTemperature: (model) => Capabilities.supportsTemperature(model),
|
|
29
30
|
getContextWindow: (model) => Capabilities.getContextWindow(model)
|
|
30
31
|
};
|
|
31
32
|
constructor(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAUxD,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG1B,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAUxD,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG1B,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;IA0N7F,OAAO,CAAC,cAAc;CAyBvB"}
|
|
@@ -52,7 +52,7 @@ export class GeminiStreaming {
|
|
|
52
52
|
functionDeclarations: request.tools.map((t) => ({
|
|
53
53
|
name: t.function.name,
|
|
54
54
|
description: t.function.description,
|
|
55
|
-
|
|
55
|
+
parametersJsonSchema: t.function.parameters
|
|
56
56
|
}))
|
|
57
57
|
}
|
|
58
58
|
];
|
|
@@ -152,7 +152,8 @@ export class GeminiStreaming {
|
|
|
152
152
|
function: {
|
|
153
153
|
name: part.functionCall.name,
|
|
154
154
|
arguments: JSON.stringify(part.functionCall.args || {})
|
|
155
|
-
}
|
|
155
|
+
},
|
|
156
|
+
...(part.thoughtSignature && { thought_signature: part.thoughtSignature })
|
|
156
157
|
});
|
|
157
158
|
}
|
|
158
159
|
}
|
|
@@ -13,6 +13,7 @@ export interface GeminiPart {
|
|
|
13
13
|
response: Record<string, unknown>;
|
|
14
14
|
};
|
|
15
15
|
thought?: boolean;
|
|
16
|
+
thoughtSignature?: string;
|
|
16
17
|
}
|
|
17
18
|
export interface GeminiContent {
|
|
18
19
|
role?: "user" | "model";
|
|
@@ -28,6 +29,7 @@ export interface GeminiGenerateContentRequest {
|
|
|
28
29
|
name: string;
|
|
29
30
|
description?: string;
|
|
30
31
|
parameters?: Record<string, unknown>;
|
|
32
|
+
parametersJsonSchema?: Record<string, unknown>;
|
|
31
33
|
}>;
|
|
32
34
|
}[];
|
|
33
35
|
generationConfig?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ModelPricing } from "../../models/types.js";
|
|
2
2
|
export declare class MistralCapabilities {
|
|
3
3
|
static getCapabilities(modelId: string): string[];
|
|
4
|
+
static supportsTemperature(modelId: string): boolean;
|
|
4
5
|
static getContextWindow(modelId: string): number | null;
|
|
5
6
|
static getMaxOutputTokens(modelId: string): number | null;
|
|
6
7
|
static supportsVision(modelId: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAiBjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAIhC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IASpD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAOtD"}
|
|
1
|
+
{"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAiBjD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAIhC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IASpD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAOtD"}
|
|
@@ -20,6 +20,9 @@ export class MistralCapabilities {
|
|
|
20
20
|
caps.push("structured_output");
|
|
21
21
|
return caps;
|
|
22
22
|
}
|
|
23
|
+
static supportsTemperature(modelId) {
|
|
24
|
+
return ModelRegistry.supportsTemperature(modelId, "mistral");
|
|
25
|
+
}
|
|
23
26
|
static getContextWindow(modelId) {
|
|
24
27
|
return ModelRegistry.getContextWindow(modelId, "mistral") ?? 32_768;
|
|
25
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAS,MAAM,gBAAgB,CAAC;AAgDlE,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAS,MAAM,gBAAgB,CAAC;AAgDlE,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAmL3D"}
|
|
@@ -11,7 +11,7 @@ export class MistralChat {
|
|
|
11
11
|
this.apiKey = apiKey;
|
|
12
12
|
}
|
|
13
13
|
async execute(request) {
|
|
14
|
-
const { model, messages, tools, max_tokens, response_format, thinking: _thinking, headers: _headers, tool_choice: _choice, parallel_tool_calls: _parallel, requestTimeout, signal
|
|
14
|
+
const { model, messages, tools, max_tokens, response_format, thinking: _thinking, headers: _headers, tool_choice: _choice, parallel_tool_calls: _parallel, requestTimeout, signal, ...rest } = request;
|
|
15
15
|
const mappedMessages = mapSystemMessages(messages, false);
|
|
16
16
|
// Sanitize messages - remove internal properties that Mistral API doesn't accept
|
|
17
17
|
const sanitizedMessages = mappedMessages.map((msg) => {
|
|
@@ -82,7 +82,8 @@ export class MistralChat {
|
|
|
82
82
|
Accept: "application/json",
|
|
83
83
|
...request.headers
|
|
84
84
|
},
|
|
85
|
-
body: JSON.stringify(body)
|
|
85
|
+
body: JSON.stringify(body),
|
|
86
|
+
signal
|
|
86
87
|
}, requestTimeout);
|
|
87
88
|
if (!response.ok) {
|
|
88
89
|
await handleMistralError(response, model);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/Errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/Errors.ts"],"names":[],"mappings":"AAcA,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CA8D3F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BadRequestError, ContextWindowExceededError, InsufficientQuotaError, InvalidModelError, NotFoundError, AuthenticationError, RateLimitError, ServerError, ServiceUnavailableError, APIError } from "../../errors/index.js";
|
|
2
|
+
import { isBillingProblem } from "../../errors/billing.js";
|
|
2
3
|
export async function handleMistralError(response, model) {
|
|
3
4
|
const status = response.status;
|
|
4
5
|
let body;
|
|
@@ -23,6 +24,9 @@ export async function handleMistralError(response, model) {
|
|
|
23
24
|
message = `Mistral error (${status}): ${body}`;
|
|
24
25
|
}
|
|
25
26
|
const provider = "mistral";
|
|
27
|
+
if (isBillingProblem(status, message)) {
|
|
28
|
+
throw new InsufficientQuotaError(message, body, provider);
|
|
29
|
+
}
|
|
26
30
|
if (status === 400) {
|
|
27
31
|
if (message.includes("context") || message.includes("length") || message.includes("tokens")) {
|
|
28
32
|
throw new ContextWindowExceededError(message, body, provider, model);
|
|
@@ -42,9 +46,6 @@ export async function handleMistralError(response, model) {
|
|
|
42
46
|
throw new BadRequestError(message, body, provider, model);
|
|
43
47
|
}
|
|
44
48
|
if (status === 429) {
|
|
45
|
-
if (message.includes("quota") || message.includes("billing")) {
|
|
46
|
-
throw new InsufficientQuotaError(message, body, provider);
|
|
47
|
-
}
|
|
48
49
|
throw new RateLimitError(message, status, body, provider);
|
|
49
50
|
}
|
|
50
51
|
if (status >= 500 && status < 600) {
|
|
@@ -23,6 +23,7 @@ export declare class MistralProvider extends BaseProvider implements Provider {
|
|
|
23
23
|
supportsModeration: (model: string) => boolean;
|
|
24
24
|
supportsReasoning: (model: string) => boolean;
|
|
25
25
|
supportsDeveloperRole: (_model: string) => boolean;
|
|
26
|
+
supportsTemperature: (model: string) => boolean;
|
|
26
27
|
getContextWindow: (model: string) => number | null;
|
|
27
28
|
};
|
|
28
29
|
constructor(options: MistralProviderOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MistralProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/MistralProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAgB,SAAQ,YAAa,YAAW,QAAQ;
|
|
1
|
+
{"version":3,"file":"MistralProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/mistral/MistralProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAgB,SAAQ,YAAa,YAAW,QAAQ;IAwBvD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAvBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAC5D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAE/C,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCAEZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;wCACD,MAAM;qCACT,MAAM;kCACT,MAAM;MAChC;gBAE2B,OAAO,EAAE,sBAAsB;IAWrD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAOhD,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,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI5D,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIzE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGxE"}
|
|
@@ -26,6 +26,7 @@ export class MistralProvider extends BaseProvider {
|
|
|
26
26
|
supportsModeration: (model) => MistralCapabilities.supportsModeration(model),
|
|
27
27
|
supportsReasoning: (model) => MistralCapabilities.supportsReasoning(model),
|
|
28
28
|
supportsDeveloperRole: (_model) => false,
|
|
29
|
+
supportsTemperature: (model) => MistralCapabilities.supportsTemperature(model),
|
|
29
30
|
getContextWindow: (model) => MistralCapabilities.getContextWindow(model)
|
|
30
31
|
};
|
|
31
32
|
constructor(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OllamaProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/ollama/OllamaProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAO7D,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,cAAc;gBACpC,OAAO,GAAE,qBAA0B;
|
|
1
|
+
{"version":3,"file":"OllamaProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/ollama/OllamaProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAO7D,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,cAAc;gBACpC,OAAO,GAAE,qBAA0B;IA6B/C,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;CAGxD"}
|
|
@@ -24,6 +24,7 @@ export class OllamaProvider extends OpenAIProvider {
|
|
|
24
24
|
supportsReasoning: (modelId) => OllamaCapabilities.supportsReasoning(modelId),
|
|
25
25
|
supportsDeveloperRole: (_modelId) => false,
|
|
26
26
|
supportsPrediction: (_modelId) => false,
|
|
27
|
+
supportsTemperature: (_modelId) => true,
|
|
27
28
|
getContextWindow: (modelId) => OllamaCapabilities.getContextWindow(modelId)
|
|
28
29
|
};
|
|
29
30
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ModelPricing } from "../../models/types.js";
|
|
2
2
|
export declare class Capabilities {
|
|
3
|
+
static supportsTemperature(modelId: string): boolean;
|
|
3
4
|
static getContextWindow(modelId: string): number | null;
|
|
4
5
|
static getMaxOutputTokens(modelId: string): number | null;
|
|
5
6
|
static supportsVision(modelId: string): boolean;
|
|
@@ -14,6 +15,11 @@ export declare class Capabilities {
|
|
|
14
15
|
static supportsDeveloperRole(modelId: string): boolean;
|
|
15
16
|
static supportsToolChoice(_modelId: string): boolean;
|
|
16
17
|
static supportsPrediction(modelId: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Models that take function tools only through the Responses API; Chat Completions rejects them
|
|
20
|
+
* with "use /v1/responses" while reasoning is on, which it is by default.
|
|
21
|
+
*/
|
|
22
|
+
static needsResponsesForTools(modelId: string): boolean;
|
|
17
23
|
static needsMaxCompletionTokens(modelId: string): boolean;
|
|
18
24
|
static getModelType(modelId: string): string;
|
|
19
25
|
static getModalities(modelId: string): {
|
|
@@ -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;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInD,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAU5C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAgB5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAkBjD,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;IAMjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
|
|
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,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInD;;;OAGG;IACH,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIvD,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAU5C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAgB5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAkBjD,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;IAMjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { ModelRegistry } from "../../models/ModelRegistry.js";
|
|
2
2
|
import { PricingRegistry } from "../../models/PricingRegistry.js";
|
|
3
3
|
export class Capabilities {
|
|
4
|
+
static supportsTemperature(modelId) {
|
|
5
|
+
return ModelRegistry.supportsTemperature(modelId, "openai");
|
|
6
|
+
}
|
|
4
7
|
static getContextWindow(modelId) {
|
|
5
8
|
return ModelRegistry.getContextWindow(modelId, "openai") ?? 128_000;
|
|
6
9
|
}
|
|
@@ -50,6 +53,13 @@ export class Capabilities {
|
|
|
50
53
|
static supportsPrediction(modelId) {
|
|
51
54
|
return /gpt-4o|gpt-4-/.test(modelId);
|
|
52
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Models that take function tools only through the Responses API; Chat Completions rejects them
|
|
58
|
+
* with "use /v1/responses" while reasoning is on, which it is by default.
|
|
59
|
+
*/
|
|
60
|
+
static needsResponsesForTools(modelId) {
|
|
61
|
+
return /^gpt-(5\.6|6)/.test(modelId);
|
|
62
|
+
}
|
|
53
63
|
static needsMaxCompletionTokens(modelId) {
|
|
54
64
|
return this.supportsReasoning(modelId);
|
|
55
65
|
}
|
|
@@ -5,6 +5,9 @@ export declare class OpenAIChat {
|
|
|
5
5
|
private readonly apiKey;
|
|
6
6
|
private readonly baseUrl;
|
|
7
7
|
constructor(providerOrUrl: OpenAIProvider | string, apiKey: string);
|
|
8
|
+
private url;
|
|
9
|
+
private authHeaders;
|
|
10
|
+
private registry;
|
|
8
11
|
execute(request: ChatRequest): Promise<ChatResponse>;
|
|
9
12
|
}
|
|
10
13
|
//# sourceMappingURL=Chat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAS3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,aAAa,EAAE,cAAc,GAAG,MAAM,EACtC,MAAM,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAS3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,aAAa,EAAE,cAAc,GAAG,MAAM,EACtC,MAAM,EAAE,MAAM;IAOjC,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,QAAQ;IAKV,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CA6J3D"}
|
|
@@ -15,8 +15,26 @@ export class OpenAIChat {
|
|
|
15
15
|
this.apiKey = apiKey;
|
|
16
16
|
this.baseUrl = typeof providerOrUrl === "string" ? providerOrUrl : providerOrUrl.apiBase();
|
|
17
17
|
}
|
|
18
|
+
// A provider decides where its requests go, signs them and names the model they are priced as;
|
|
19
|
+
// Azure, for one, routes by deployment and wants an api-key header, not a bearer token.
|
|
20
|
+
url() {
|
|
21
|
+
if (typeof this.providerOrUrl === "string")
|
|
22
|
+
return buildUrl(this.baseUrl, "/chat/completions");
|
|
23
|
+
return this.providerOrUrl.url("/chat/completions");
|
|
24
|
+
}
|
|
25
|
+
authHeaders() {
|
|
26
|
+
if (typeof this.providerOrUrl !== "string")
|
|
27
|
+
return this.providerOrUrl.headers();
|
|
28
|
+
return { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" };
|
|
29
|
+
}
|
|
30
|
+
registry(model) {
|
|
31
|
+
if (typeof this.providerOrUrl === "string")
|
|
32
|
+
return { model, provider: "openai" };
|
|
33
|
+
return { model: this.providerOrUrl.registryModel(model), provider: this.providerOrUrl.id };
|
|
34
|
+
}
|
|
18
35
|
async execute(request) {
|
|
19
|
-
const
|
|
36
|
+
const known = this.registry(request.model);
|
|
37
|
+
const temperature = Capabilities.normalizeTemperature(request.temperature, known.model);
|
|
20
38
|
const isMainOpenAI = this.baseUrl.includes("api.openai.com");
|
|
21
39
|
const supportsDeveloperRole = isMainOpenAI &&
|
|
22
40
|
(typeof this.providerOrUrl === "string"
|
|
@@ -32,7 +50,7 @@ export class OpenAIChat {
|
|
|
32
50
|
if (temperature !== undefined && temperature !== null)
|
|
33
51
|
body.temperature = temperature;
|
|
34
52
|
if (max_tokens) {
|
|
35
|
-
if (Capabilities.needsMaxCompletionTokens(
|
|
53
|
+
if (Capabilities.needsMaxCompletionTokens(known.model)) {
|
|
36
54
|
body.max_completion_tokens = max_tokens;
|
|
37
55
|
}
|
|
38
56
|
else {
|
|
@@ -81,17 +99,16 @@ export class OpenAIChat {
|
|
|
81
99
|
if (thinking?.effort && thinking.effort !== "none") {
|
|
82
100
|
body.reasoning_effort = thinking.effort;
|
|
83
101
|
}
|
|
84
|
-
const url =
|
|
102
|
+
const url = this.url();
|
|
85
103
|
logger.logRequest("OpenAI", "POST", url, body);
|
|
86
104
|
const response = await fetchWithTimeout(url, {
|
|
87
105
|
method: "POST",
|
|
88
106
|
headers: {
|
|
89
|
-
|
|
90
|
-
"Content-Type": "application/json",
|
|
107
|
+
...this.authHeaders(),
|
|
91
108
|
...request.headers
|
|
92
109
|
},
|
|
93
110
|
body: JSON.stringify(body),
|
|
94
|
-
signal
|
|
111
|
+
signal
|
|
95
112
|
}, request.requestTimeout);
|
|
96
113
|
if (!response.ok) {
|
|
97
114
|
await handleOpenAIError(response, request.model);
|
|
@@ -120,7 +137,9 @@ export class OpenAIChat {
|
|
|
120
137
|
if (!content && !tool_calls) {
|
|
121
138
|
throw new Error("OpenAI returned empty response");
|
|
122
139
|
}
|
|
123
|
-
const calculatedUsage = usage
|
|
140
|
+
const calculatedUsage = usage
|
|
141
|
+
? ModelRegistry.calculateCost(usage, known.model, known.provider)
|
|
142
|
+
: undefined;
|
|
124
143
|
return {
|
|
125
144
|
content,
|
|
126
145
|
tool_calls,
|
|
@@ -5,6 +5,8 @@ export declare class OpenAIEmbedding {
|
|
|
5
5
|
constructor(baseUrl: string, apiKey: string);
|
|
6
6
|
protected getProviderName(): string;
|
|
7
7
|
protected validateModel(model: string): void;
|
|
8
|
+
protected endpoint(): string;
|
|
9
|
+
protected requestHeaders(): Record<string, string>;
|
|
8
10
|
execute(request: EmbeddingRequest): Promise<EmbeddingResponse>;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=Embedding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Embedding.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQrE,qBAAa,eAAe;IAExB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAClC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAGnC,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Embedding.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQrE,qBAAa,eAAe;IAExB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAClC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAGnC,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5C,SAAS,CAAC,QAAQ,IAAI,MAAM;IAI5B,SAAS,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI5C,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAoDrE"}
|
|
@@ -19,6 +19,12 @@ export class OpenAIEmbedding {
|
|
|
19
19
|
throw new Error(`Model ${model} does not support embeddings.`);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
+
endpoint() {
|
|
23
|
+
return buildUrl(this.baseUrl, "/embeddings");
|
|
24
|
+
}
|
|
25
|
+
requestHeaders() {
|
|
26
|
+
return { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" };
|
|
27
|
+
}
|
|
22
28
|
async execute(request) {
|
|
23
29
|
const model = request.model || DEFAULT_MODELS.EMBEDDING;
|
|
24
30
|
this.validateModel(model);
|
|
@@ -32,14 +38,11 @@ export class OpenAIEmbedding {
|
|
|
32
38
|
if (request.user) {
|
|
33
39
|
body.user = request.user;
|
|
34
40
|
}
|
|
35
|
-
const url =
|
|
41
|
+
const url = this.endpoint();
|
|
36
42
|
logger.logRequest("OpenAI", "POST", url, body);
|
|
37
43
|
const response = await fetchWithTimeout(url, {
|
|
38
44
|
method: "POST",
|
|
39
|
-
headers:
|
|
40
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
41
|
-
"Content-Type": "application/json"
|
|
42
|
-
},
|
|
45
|
+
headers: this.requestHeaders(),
|
|
43
46
|
body: JSON.stringify(body)
|
|
44
47
|
}, request.requestTimeout);
|
|
45
48
|
if (!response.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Errors.ts"],"names":[],"mappings":"AAcA,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAoE1F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BadRequestError, ContextWindowExceededError, InsufficientQuotaError, InvalidModelError, NotFoundError, AuthenticationError, RateLimitError, ServerError, ServiceUnavailableError, APIError } from "../../errors/index.js";
|
|
2
|
+
import { isBillingProblem } from "../../errors/billing.js";
|
|
2
3
|
export async function handleOpenAIError(response, model) {
|
|
3
4
|
const status = response.status;
|
|
4
5
|
let body;
|
|
@@ -30,6 +31,9 @@ export async function handleOpenAIError(response, model) {
|
|
|
30
31
|
message = `OpenAI error (${status}): ${body}`;
|
|
31
32
|
}
|
|
32
33
|
const provider = "openai";
|
|
34
|
+
if (isBillingProblem(status, message, code)) {
|
|
35
|
+
throw new InsufficientQuotaError(message, body, provider, model);
|
|
36
|
+
}
|
|
33
37
|
if (status === 400) {
|
|
34
38
|
if (code === "context_length_exceeded" ||
|
|
35
39
|
message.includes("context length") ||
|
|
@@ -48,9 +52,6 @@ export async function handleOpenAIError(response, model) {
|
|
|
48
52
|
throw new NotFoundError(message, status, body, provider, model);
|
|
49
53
|
}
|
|
50
54
|
if (status === 429) {
|
|
51
|
-
if (code === "insufficient_quota") {
|
|
52
|
-
throw new InsufficientQuotaError(message, body, provider, model);
|
|
53
|
-
}
|
|
54
55
|
throw new RateLimitError(message, body, provider, model);
|
|
55
56
|
}
|
|
56
57
|
if (status === 502 || status === 503) {
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { ModelInfo } from "../Provider.js";
|
|
2
|
+
/** A model as an OpenAI-compatible /models endpoint lists it */
|
|
3
|
+
export type ListedModel = {
|
|
4
|
+
id: string;
|
|
5
|
+
created: number;
|
|
6
|
+
owned_by: string;
|
|
7
|
+
};
|
|
2
8
|
export declare class OpenAIModels {
|
|
3
9
|
protected readonly baseUrl: string;
|
|
4
10
|
protected readonly apiKey: string;
|
|
@@ -13,6 +19,10 @@ export declare class OpenAIModels {
|
|
|
13
19
|
};
|
|
14
20
|
protected getCapabilities(modelId: string): string[];
|
|
15
21
|
protected getPricing(modelId: string): import("../../models/types.js").ModelPricing | undefined;
|
|
22
|
+
protected endpoint(): string;
|
|
23
|
+
protected requestHeaders(): Record<string, string>;
|
|
24
|
+
/** The models the API lists that are worth returning */
|
|
25
|
+
protected listed(data: ListedModel[]): ListedModel[];
|
|
16
26
|
execute(): Promise<ModelInfo[]>;
|
|
17
27
|
find(modelId: string): import("../../models/types.js").Model | undefined;
|
|
18
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Models.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAO3C,qBAAa,YAAY;IAErB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAClC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAGnC,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMpD,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ1D,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5D,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM;;;;IAKvC,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAKpD,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"Models.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAO3C,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,qBAAa,YAAY;IAErB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAClC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAGnC,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMpD,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ1D,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5D,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM;;;;IAKvC,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAKpD,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM;IAKpC,SAAS,CAAC,QAAQ,IAAI,MAAM;IAI5B,SAAS,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIlD,wDAAwD;IACxD,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAI9C,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAsDrC,IAAI,CAAC,OAAO,EAAE,MAAM;CAGrB"}
|