@node-llm/core 1.8.0 → 1.10.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 +35 -0
- package/dist/aliases.d.ts +105 -9
- package/dist/aliases.d.ts.map +1 -1
- package/dist/aliases.js +105 -9
- package/dist/chat/Chat.d.ts +8 -3
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +181 -131
- package/dist/chat/ChatOptions.d.ts +2 -0
- package/dist/chat/ChatOptions.d.ts.map +1 -1
- package/dist/chat/ChatResponse.d.ts +24 -3
- package/dist/chat/ChatResponse.d.ts.map +1 -1
- package/dist/chat/ChatResponse.js +72 -5
- package/dist/chat/ChatStream.d.ts.map +1 -1
- package/dist/chat/ChatStream.js +111 -56
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -7
- 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 +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/llm.d.ts +8 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +156 -59
- package/dist/middlewares/CostGuardMiddleware.d.ts +24 -0
- package/dist/middlewares/CostGuardMiddleware.d.ts.map +1 -0
- package/dist/middlewares/CostGuardMiddleware.js +23 -0
- package/dist/middlewares/PIIMaskMiddleware.d.ts +23 -0
- package/dist/middlewares/PIIMaskMiddleware.d.ts.map +1 -0
- package/dist/middlewares/PIIMaskMiddleware.js +41 -0
- package/dist/middlewares/UsageLoggerMiddleware.d.ts +22 -0
- package/dist/middlewares/UsageLoggerMiddleware.d.ts.map +1 -0
- package/dist/middlewares/UsageLoggerMiddleware.js +30 -0
- package/dist/middlewares/index.d.ts +4 -0
- package/dist/middlewares/index.d.ts.map +1 -0
- package/dist/middlewares/index.js +3 -0
- 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.js → models.json} +9934 -8196
- package/dist/providers/BaseProvider.d.ts +6 -1
- package/dist/providers/BaseProvider.d.ts.map +1 -1
- package/dist/providers/BaseProvider.js +19 -0
- package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.js +2 -1
- 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/Chat.d.ts.map +1 -1
- package/dist/providers/bedrock/Chat.js +2 -20
- 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/Streaming.d.ts.map +1 -1
- package/dist/providers/bedrock/Streaming.js +2 -3
- 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/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/OllamaProvider.d.ts.map +1 -1
- package/dist/providers/ollama/OllamaProvider.js +2 -2
- 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 +1 -1
- package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/openai/OpenAIProvider.js +15 -3
- 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 +3 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +10 -2
- package/dist/types/Middleware.d.ts +98 -0
- package/dist/types/Middleware.d.ts.map +1 -0
- package/dist/types/Middleware.js +1 -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/dist/utils/middleware-runner.d.ts +7 -0
- package/dist/utils/middleware-runner.d.ts.map +1 -0
- package/dist/utils/middleware-runner.js +20 -0
- package/package.json +1 -1
- package/dist/models/models.d.ts +0 -572
- package/dist/models/models.d.ts.map +0 -1
package/dist/chat/ChatStream.js
CHANGED
|
@@ -8,6 +8,9 @@ import { toJsonSchema } from "../schema/to-json-schema.js";
|
|
|
8
8
|
import { ChatValidator } from "./Validation.js";
|
|
9
9
|
import { ToolHandler } from "./ToolHandler.js";
|
|
10
10
|
import { logger } from "../utils/logger.js";
|
|
11
|
+
import { ModelRegistry } from "../models/ModelRegistry.js";
|
|
12
|
+
import { runMiddleware } from "../utils/middleware-runner.js";
|
|
13
|
+
import { randomUUID } from "node:crypto";
|
|
11
14
|
/**
|
|
12
15
|
* Internal handler for chat streaming logic.
|
|
13
16
|
* Wraps the provider's stream with side effects like history updates and events.
|
|
@@ -57,6 +60,9 @@ export class ChatStream {
|
|
|
57
60
|
...requestOptions,
|
|
58
61
|
headers: { ...baseOptions.headers, ...requestOptions.headers }
|
|
59
62
|
};
|
|
63
|
+
const requestId = randomUUID();
|
|
64
|
+
const state = {};
|
|
65
|
+
const middlewares = options.middlewares || [];
|
|
60
66
|
// Process Multimodal Content
|
|
61
67
|
let messageContent = content;
|
|
62
68
|
const files = [...(requestOptions.images ?? []), ...(requestOptions.files ?? [])];
|
|
@@ -70,53 +76,73 @@ export class ChatStream {
|
|
|
70
76
|
ChatValidator.validateTools(provider, model, true, options);
|
|
71
77
|
}
|
|
72
78
|
messages.push({ role: "user", content: messageContent });
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
79
|
+
// Prepare Middleware Context
|
|
80
|
+
const context = {
|
|
81
|
+
requestId,
|
|
82
|
+
provider: provider.id,
|
|
83
|
+
model: model,
|
|
84
|
+
messages: [...systemMessages, ...messages],
|
|
85
|
+
options: options,
|
|
86
|
+
state
|
|
87
|
+
};
|
|
88
|
+
try {
|
|
89
|
+
// 1. onRequest Hook
|
|
90
|
+
await runMiddleware(middlewares, "onRequest", context);
|
|
91
|
+
if (!provider.stream) {
|
|
92
|
+
throw new Error("Streaming not supported by provider");
|
|
93
|
+
}
|
|
94
|
+
// Process Schema/Structured Output
|
|
95
|
+
let responseFormat = options.responseFormat;
|
|
96
|
+
if (!responseFormat && options.schema) {
|
|
97
|
+
ChatValidator.validateStructuredOutput(provider, model, true, options);
|
|
98
|
+
const jsonSchema = toJsonSchema(options.schema.definition.schema);
|
|
99
|
+
responseFormat = {
|
|
100
|
+
type: "json_schema",
|
|
101
|
+
json_schema: {
|
|
102
|
+
name: options.schema.definition.name,
|
|
103
|
+
description: options.schema.definition.description,
|
|
104
|
+
strict: options.schema.definition.strict ?? true,
|
|
105
|
+
schema: jsonSchema
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
let isFirst = true;
|
|
110
|
+
const maxToolCalls = options.maxToolCalls ?? 5;
|
|
111
|
+
let stepCount = 0;
|
|
112
|
+
const totalUsage = { input_tokens: 0, output_tokens: 0, total_tokens: 0 };
|
|
113
|
+
const trackUsage = (u) => {
|
|
114
|
+
if (u) {
|
|
115
|
+
// Fallback cost calculation if provider didn't return it
|
|
116
|
+
if (u.cost === undefined) {
|
|
117
|
+
const withCost = ModelRegistry.calculateCost(u, model, provider.id);
|
|
118
|
+
u.cost = withCost.cost;
|
|
119
|
+
u.input_cost = withCost.input_cost;
|
|
120
|
+
u.output_cost = withCost.output_cost;
|
|
121
|
+
}
|
|
122
|
+
totalUsage.input_tokens += u.input_tokens;
|
|
123
|
+
totalUsage.output_tokens += u.output_tokens;
|
|
124
|
+
totalUsage.total_tokens += u.total_tokens;
|
|
125
|
+
if (u.cached_tokens) {
|
|
126
|
+
totalUsage.cached_tokens = (totalUsage.cached_tokens ?? 0) + u.cached_tokens;
|
|
127
|
+
}
|
|
128
|
+
if (u.cost !== undefined) {
|
|
129
|
+
totalUsage.cost = (totalUsage.cost ?? 0) + u.cost;
|
|
130
|
+
}
|
|
88
131
|
}
|
|
89
132
|
};
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const maxToolCalls = options.maxToolCalls ?? 5;
|
|
96
|
-
let stepCount = 0;
|
|
97
|
-
const totalUsage = { input_tokens: 0, output_tokens: 0, total_tokens: 0 };
|
|
98
|
-
const trackUsage = (u) => {
|
|
99
|
-
if (u) {
|
|
100
|
-
totalUsage.input_tokens += u.input_tokens;
|
|
101
|
-
totalUsage.output_tokens += u.output_tokens;
|
|
102
|
-
totalUsage.total_tokens += u.total_tokens;
|
|
103
|
-
if (u.cached_tokens) {
|
|
104
|
-
totalUsage.cached_tokens = (totalUsage.cached_tokens ?? 0) + u.cached_tokens;
|
|
133
|
+
let assistantResponse;
|
|
134
|
+
while (true) {
|
|
135
|
+
stepCount++;
|
|
136
|
+
if (stepCount > maxToolCalls) {
|
|
137
|
+
throw new Error(`[NodeLLM] Maximum tool execution calls (${maxToolCalls}) exceeded during streaming.`);
|
|
105
138
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
let fullContent = "";
|
|
114
|
-
let fullReasoning = "";
|
|
115
|
-
const thinking = { text: "" };
|
|
116
|
-
let toolCalls;
|
|
117
|
-
let currentTurnUsage;
|
|
118
|
-
try {
|
|
119
|
-
let requestMessages = [...systemMessages, ...messages];
|
|
139
|
+
let fullContent = "";
|
|
140
|
+
let fullReasoning = "";
|
|
141
|
+
const thinking = { text: "" };
|
|
142
|
+
let toolCalls;
|
|
143
|
+
let currentTurnUsage;
|
|
144
|
+
context.messages = [...systemMessages, ...messages];
|
|
145
|
+
let requestMessages = context.messages; // Use up-to-date messages from context
|
|
120
146
|
if (options.onBeforeRequest) {
|
|
121
147
|
const result = await options.onBeforeRequest(requestMessages);
|
|
122
148
|
if (result) {
|
|
@@ -169,7 +195,8 @@ export class ChatStream {
|
|
|
169
195
|
trackUsage(currentTurnUsage);
|
|
170
196
|
}
|
|
171
197
|
}
|
|
172
|
-
|
|
198
|
+
assistantResponse = new ChatResponseString(fullContent || "", currentTurnUsage || { input_tokens: 0, output_tokens: 0, total_tokens: 0 }, model, provider.id, thinking.text || thinking.signature ? thinking : undefined, fullReasoning || undefined, toolCalls, undefined, // finish_reason
|
|
199
|
+
options.schema);
|
|
173
200
|
if (options.onAfterResponse) {
|
|
174
201
|
const result = await options.onAfterResponse(assistantResponse);
|
|
175
202
|
if (result) {
|
|
@@ -200,34 +227,62 @@ export class ChatStream {
|
|
|
200
227
|
continue;
|
|
201
228
|
}
|
|
202
229
|
}
|
|
230
|
+
// 2. onToolCallStart Hook
|
|
231
|
+
await runMiddleware(middlewares, "onToolCallStart", context, toolCall);
|
|
203
232
|
try {
|
|
204
233
|
const toolResult = await ToolHandler.execute(toolCall, options.tools, options.onToolCallStart, options.onToolCallEnd);
|
|
234
|
+
// 3. onToolCallEnd Hook
|
|
235
|
+
await runMiddleware(middlewares, "onToolCallEnd", context, toolCall, toolResult.content);
|
|
205
236
|
messages.push(provider.formatToolResultMessage(toolResult.tool_call_id, toolResult.content));
|
|
206
237
|
}
|
|
207
238
|
catch (error) {
|
|
208
|
-
|
|
209
|
-
|
|
239
|
+
let currentError = error;
|
|
240
|
+
// 4. onToolCallError Hook
|
|
241
|
+
const middlewareDirective = await runMiddleware(middlewares, "onToolCallError", context, toolCall, currentError);
|
|
242
|
+
const directive = middlewareDirective || (await options.onToolCallError?.(toolCall, currentError));
|
|
210
243
|
if (directive === "STOP") {
|
|
211
244
|
throw error;
|
|
212
245
|
}
|
|
213
|
-
|
|
246
|
+
if (directive === "RETRY") {
|
|
247
|
+
try {
|
|
248
|
+
const toolResult = await ToolHandler.execute(toolCall, options.tools, options.onToolCallStart, options.onToolCallEnd);
|
|
249
|
+
await runMiddleware(middlewares, "onToolCallEnd", context, toolCall, toolResult.content);
|
|
250
|
+
messages.push(provider.formatToolResultMessage(toolResult.tool_call_id, toolResult.content));
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
catch (retryError) {
|
|
254
|
+
currentError = retryError;
|
|
255
|
+
await runMiddleware(middlewares, "onToolCallError", context, toolCall, currentError);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
messages.push(provider.formatToolResultMessage(toolCall.id, `Fatal error executing tool '${toolCall.function.name}': ${currentError.message}`, { isError: true }));
|
|
214
259
|
if (directive === "CONTINUE") {
|
|
215
260
|
continue;
|
|
216
261
|
}
|
|
217
|
-
const isFatal =
|
|
262
|
+
const isFatal = currentError.fatal === true ||
|
|
263
|
+
currentError.status === 401 ||
|
|
264
|
+
currentError.status === 403;
|
|
218
265
|
if (isFatal) {
|
|
219
|
-
throw
|
|
266
|
+
throw currentError;
|
|
220
267
|
}
|
|
221
|
-
logger.error(`Tool execution failed for '${toolCall.function.name}':`,
|
|
268
|
+
logger.error(`Tool execution failed for '${toolCall.function.name}':`, currentError);
|
|
222
269
|
}
|
|
223
270
|
}
|
|
271
|
+
// Loop continues -> streaming next chunk
|
|
224
272
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
273
|
+
// 5. onResponse Hook
|
|
274
|
+
if (assistantResponse) {
|
|
275
|
+
await runMiddleware(middlewares, "onResponse", context, assistantResponse);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
catch (err) {
|
|
279
|
+
// 6. onError Hook
|
|
280
|
+
await runMiddleware(middlewares, "onError", context, err);
|
|
281
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
282
|
+
// Aborted, still maybe want onError? Middleware logic says "onError".
|
|
283
|
+
// But rethrow for sure.
|
|
230
284
|
}
|
|
285
|
+
throw err;
|
|
231
286
|
}
|
|
232
287
|
};
|
|
233
288
|
return new Stream(() => sideEffectGenerator(this, this.provider, this.model, this.messages, this.systemMessages, this.options, controller, content, options), controller);
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_MAX_TOOL_CALLS, DEFAULT_MAX_RETRIES, DEFAULT_REQUEST_TIMEOUT, DEFAULT_MAX_TOKENS, DEFAULT_TOOL_EXECUTION, DEFAULT_OLLAMA_BASE_URL } from "./constants.js";
|
|
1
|
+
import { DEFAULT_MAX_TOOL_CALLS, DEFAULT_MAX_RETRIES, DEFAULT_REQUEST_TIMEOUT, DEFAULT_MAX_TOKENS, DEFAULT_TOOL_EXECUTION, DEFAULT_OPENAI_BASE_URL, DEFAULT_ANTHROPIC_BASE_URL, DEFAULT_GEMINI_BASE_URL, DEFAULT_DEEPSEEK_BASE_URL, DEFAULT_OPENROUTER_BASE_URL, DEFAULT_OLLAMA_BASE_URL, DEFAULT_BEDROCK_REGION } from "./constants.js";
|
|
2
2
|
export class Configuration {
|
|
3
3
|
_openaiApiKey;
|
|
4
4
|
_openaiApiBase;
|
|
@@ -27,7 +27,7 @@ export class Configuration {
|
|
|
27
27
|
this._openaiApiKey = v;
|
|
28
28
|
}
|
|
29
29
|
get openaiApiBase() {
|
|
30
|
-
return this._openaiApiBase ?? process.env.OPENAI_API_BASE?.trim();
|
|
30
|
+
return this._openaiApiBase ?? process.env.OPENAI_API_BASE?.trim() ?? DEFAULT_OPENAI_BASE_URL;
|
|
31
31
|
}
|
|
32
32
|
set openaiApiBase(v) {
|
|
33
33
|
this._openaiApiBase = v;
|
|
@@ -39,7 +39,7 @@ export class Configuration {
|
|
|
39
39
|
this._anthropicApiKey = v;
|
|
40
40
|
}
|
|
41
41
|
get anthropicApiBase() {
|
|
42
|
-
return this._anthropicApiBase ?? process.env.ANTHROPIC_API_BASE?.trim();
|
|
42
|
+
return (this._anthropicApiBase ?? process.env.ANTHROPIC_API_BASE?.trim() ?? DEFAULT_ANTHROPIC_BASE_URL);
|
|
43
43
|
}
|
|
44
44
|
set anthropicApiBase(v) {
|
|
45
45
|
this._anthropicApiBase = v;
|
|
@@ -51,7 +51,7 @@ export class Configuration {
|
|
|
51
51
|
this._geminiApiKey = v;
|
|
52
52
|
}
|
|
53
53
|
get geminiApiBase() {
|
|
54
|
-
return this._geminiApiBase ?? process.env.GEMINI_API_BASE?.trim();
|
|
54
|
+
return this._geminiApiBase ?? process.env.GEMINI_API_BASE?.trim() ?? DEFAULT_GEMINI_BASE_URL;
|
|
55
55
|
}
|
|
56
56
|
set geminiApiBase(v) {
|
|
57
57
|
this._geminiApiBase = v;
|
|
@@ -63,7 +63,7 @@ export class Configuration {
|
|
|
63
63
|
this._deepseekApiKey = v;
|
|
64
64
|
}
|
|
65
65
|
get deepseekApiBase() {
|
|
66
|
-
return this._deepseekApiBase ?? process.env.DEEPSEEK_API_BASE?.trim();
|
|
66
|
+
return (this._deepseekApiBase ?? process.env.DEEPSEEK_API_BASE?.trim() ?? DEFAULT_DEEPSEEK_BASE_URL);
|
|
67
67
|
}
|
|
68
68
|
set deepseekApiBase(v) {
|
|
69
69
|
this._deepseekApiBase = v;
|
|
@@ -81,7 +81,9 @@ export class Configuration {
|
|
|
81
81
|
this._openrouterApiKey = v;
|
|
82
82
|
}
|
|
83
83
|
get openrouterApiBase() {
|
|
84
|
-
return this._openrouterApiBase ??
|
|
84
|
+
return (this._openrouterApiBase ??
|
|
85
|
+
process.env.OPENROUTER_API_BASE?.trim() ??
|
|
86
|
+
DEFAULT_OPENROUTER_BASE_URL);
|
|
85
87
|
}
|
|
86
88
|
set openrouterApiBase(v) {
|
|
87
89
|
this._openrouterApiBase = v;
|
|
@@ -112,7 +114,7 @@ export class Configuration {
|
|
|
112
114
|
this._bedrockSessionToken = v;
|
|
113
115
|
}
|
|
114
116
|
get bedrockRegion() {
|
|
115
|
-
return this._bedrockRegion ?? process.env.AWS_REGION?.trim() ??
|
|
117
|
+
return this._bedrockRegion ?? process.env.AWS_REGION?.trim() ?? DEFAULT_BEDROCK_REGION;
|
|
116
118
|
}
|
|
117
119
|
set bedrockRegion(v) {
|
|
118
120
|
this._bedrockRegion = v;
|
package/dist/constants.d.ts
CHANGED
|
@@ -8,6 +8,11 @@ export declare const DEFAULT_MAX_RETRIES = 2;
|
|
|
8
8
|
export declare const DEFAULT_TOOL_EXECUTION = ToolExecutionMode.AUTO;
|
|
9
9
|
export declare const DEFAULT_REQUEST_TIMEOUT = 30000;
|
|
10
10
|
export declare const DEFAULT_MAX_TOKENS = 4096;
|
|
11
|
+
export declare const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
|
|
12
|
+
export declare const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com/v1";
|
|
13
|
+
export declare const DEFAULT_GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta";
|
|
14
|
+
export declare const DEFAULT_DEEPSEEK_BASE_URL = "https://api.deepseek.com";
|
|
15
|
+
export declare const DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
|
|
11
16
|
export declare const DEFAULT_OLLAMA_BASE_URL = "http://localhost:11434/v1";
|
|
12
17
|
export declare const DEFAULT_MODELS: {
|
|
13
18
|
readonly TRANSCRIPTION: "whisper-1";
|
|
@@ -15,4 +20,5 @@ export declare const DEFAULT_MODELS: {
|
|
|
15
20
|
readonly EMBEDDING: "text-embedding-3-small";
|
|
16
21
|
readonly IMAGE: "dall-e-3";
|
|
17
22
|
};
|
|
23
|
+
export declare const DEFAULT_BEDROCK_REGION = "us-east-1";
|
|
18
24
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,oBAAY,iBAAiB;IAC3B,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAC7D,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,kBAAkB,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,oBAAY,iBAAiB;IAC3B,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAC7D,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AACnE,eAAO,MAAM,0BAA0B,iCAAiC,CAAC;AACzE,eAAO,MAAM,uBAAuB,qDAAqD,CAAC;AAC1F,eAAO,MAAM,yBAAyB,6BAA6B,CAAC;AACpE,eAAO,MAAM,2BAA2B,iCAAiC,CAAC;AAC1E,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAEnE,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,eAAO,MAAM,sBAAsB,cAAc,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -9,6 +9,11 @@ export const DEFAULT_MAX_RETRIES = 2;
|
|
|
9
9
|
export const DEFAULT_TOOL_EXECUTION = ToolExecutionMode.AUTO;
|
|
10
10
|
export const DEFAULT_REQUEST_TIMEOUT = 30000; // 30 seconds
|
|
11
11
|
export const DEFAULT_MAX_TOKENS = 4096; // 4K tokens output limit
|
|
12
|
+
export const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
|
|
13
|
+
export const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com/v1";
|
|
14
|
+
export const DEFAULT_GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta";
|
|
15
|
+
export const DEFAULT_DEEPSEEK_BASE_URL = "https://api.deepseek.com";
|
|
16
|
+
export const DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
|
|
12
17
|
export const DEFAULT_OLLAMA_BASE_URL = "http://localhost:11434/v1";
|
|
13
18
|
export const DEFAULT_MODELS = {
|
|
14
19
|
TRANSCRIPTION: "whisper-1",
|
|
@@ -16,3 +21,4 @@ export const DEFAULT_MODELS = {
|
|
|
16
21
|
EMBEDDING: "text-embedding-3-small",
|
|
17
22
|
IMAGE: "dall-e-3"
|
|
18
23
|
};
|
|
24
|
+
export const DEFAULT_BEDROCK_REGION = "us-east-1";
|
package/dist/errors/index.d.ts
CHANGED
|
@@ -35,6 +35,12 @@ export declare class APIError extends LLMError {
|
|
|
35
35
|
export declare class BadRequestError extends APIError {
|
|
36
36
|
constructor(message: string, body: unknown, provider?: string, model?: string);
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* 400 - Specifically for context window/token limit issues
|
|
40
|
+
*/
|
|
41
|
+
export declare class ContextWindowExceededError extends BadRequestError {
|
|
42
|
+
constructor(message: string, body: unknown, provider?: string, model?: string);
|
|
43
|
+
}
|
|
38
44
|
/**
|
|
39
45
|
* 401 - Invalid or missing API key
|
|
40
46
|
*/
|
|
@@ -66,6 +72,12 @@ export declare class AuthenticationError extends APIError {
|
|
|
66
72
|
export declare class RateLimitError extends APIError {
|
|
67
73
|
constructor(message: string, body: unknown, provider?: string, model?: string);
|
|
68
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* 429 - Out of credits or monthly quota exceeded
|
|
77
|
+
*/
|
|
78
|
+
export declare class InsufficientQuotaError extends RateLimitError {
|
|
79
|
+
constructor(message: string, body: unknown, provider?: string, model?: string);
|
|
80
|
+
}
|
|
69
81
|
/**
|
|
70
82
|
* 500+ - Provider server error
|
|
71
83
|
*/
|
|
@@ -87,8 +99,14 @@ export declare class ConfigurationError extends LLMError {
|
|
|
87
99
|
/**
|
|
88
100
|
* Requested model or provider not found
|
|
89
101
|
*/
|
|
90
|
-
export declare class NotFoundError extends
|
|
91
|
-
constructor(message: string);
|
|
102
|
+
export declare class NotFoundError extends APIError {
|
|
103
|
+
constructor(message: string, status?: number, body?: unknown, provider?: string, model?: string);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Specifically when the requested model ID is invalid/unknown
|
|
107
|
+
*/
|
|
108
|
+
export declare class InvalidModelError extends NotFoundError {
|
|
109
|
+
constructor(message: string, body: unknown, provider?: string, model?: string);
|
|
92
110
|
}
|
|
93
111
|
/**
|
|
94
112
|
* Model does not support requested capability
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;aAGf,IAAI,CAAC,EAAE,MAAM;gBAD7B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA;CAMhC;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,QAAQ;aAGlB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,OAAO;aACb,QAAQ,CAAC,EAAE,MAAM;aACjB,KAAK,CAAC,EAAE,MAAM;gBAJ9B,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,KAAK,CAAC,EAAE,MAAM,YAAA;CAIjC;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAI9E;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;CAI9D;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;CAI9D;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;CAI9D;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;CAI9E;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAI9E;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAI9F;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,WAAW;gBAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAI9F;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM;CAG5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
|
package/dist/errors/index.js
CHANGED
|
@@ -49,6 +49,15 @@ export class BadRequestError extends APIError {
|
|
|
49
49
|
this.name = "BadRequestError";
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* 400 - Specifically for context window/token limit issues
|
|
54
|
+
*/
|
|
55
|
+
export class ContextWindowExceededError extends BadRequestError {
|
|
56
|
+
constructor(message, body, provider, model) {
|
|
57
|
+
super(message, body, provider, model);
|
|
58
|
+
this.name = "ContextWindowExceededError";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
52
61
|
/**
|
|
53
62
|
* 401 - Invalid or missing API key
|
|
54
63
|
*/
|
|
@@ -95,6 +104,15 @@ export class RateLimitError extends APIError {
|
|
|
95
104
|
this.name = "RateLimitError";
|
|
96
105
|
}
|
|
97
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* 429 - Out of credits or monthly quota exceeded
|
|
109
|
+
*/
|
|
110
|
+
export class InsufficientQuotaError extends RateLimitError {
|
|
111
|
+
constructor(message, body, provider, model) {
|
|
112
|
+
super(message, body, provider, model);
|
|
113
|
+
this.name = "InsufficientQuotaError";
|
|
114
|
+
}
|
|
115
|
+
}
|
|
98
116
|
/**
|
|
99
117
|
* 500+ - Provider server error
|
|
100
118
|
*/
|
|
@@ -124,9 +142,19 @@ export class ConfigurationError extends LLMError {
|
|
|
124
142
|
/**
|
|
125
143
|
* Requested model or provider not found
|
|
126
144
|
*/
|
|
127
|
-
export class NotFoundError extends
|
|
128
|
-
constructor(message) {
|
|
129
|
-
super(message,
|
|
145
|
+
export class NotFoundError extends APIError {
|
|
146
|
+
constructor(message, status = 404, body = null, provider, model) {
|
|
147
|
+
super(message, status, body, provider, model);
|
|
148
|
+
this.name = "NotFoundError";
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Specifically when the requested model ID is invalid/unknown
|
|
153
|
+
*/
|
|
154
|
+
export class InvalidModelError extends NotFoundError {
|
|
155
|
+
constructor(message, body, provider, model) {
|
|
156
|
+
super(message, 404, body, provider, model);
|
|
157
|
+
this.name = "InvalidModelError";
|
|
130
158
|
}
|
|
131
159
|
}
|
|
132
160
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -6,14 +6,17 @@ export * from "./chat/ChatResponse.js";
|
|
|
6
6
|
export * from "./chat/Chat.js";
|
|
7
7
|
export * from "./chat/ChatStream.js";
|
|
8
8
|
export * from "./streaming/Stream.js";
|
|
9
|
+
export * from "./errors/index.js";
|
|
10
|
+
export type { Middleware, MiddlewareContext } from "./types/Middleware.js";
|
|
11
|
+
export * from "./middlewares/index.js";
|
|
9
12
|
export { z } from "zod";
|
|
10
13
|
export { NodeLLM, LegacyNodeLLM, createLLM, NodeLLMCore, Transcription, Moderation, Embedding, ModelRegistry, PricingRegistry } from "./llm.js";
|
|
11
14
|
export { config } from "./config.js";
|
|
12
15
|
export type { NodeLLMConfig } from "./config.js";
|
|
13
|
-
export { providerRegistry } from "./providers/registry.js";
|
|
16
|
+
export { providerRegistry, ProviderInterceptor } from "./providers/registry.js";
|
|
14
17
|
export { Schema } from "./schema/Schema.js";
|
|
15
18
|
export { BaseProvider } from "./providers/BaseProvider.js";
|
|
16
|
-
export { ChatRequest, ChatResponse, ChatChunk, ThinkingConfig, ThinkingResult, Usage } from "./providers/Provider.js";
|
|
19
|
+
export { Provider, ProviderCapabilities, ChatRequest, ChatResponse, ChatChunk, ThinkingConfig, ThinkingResult, Usage, ImageRequest, ImageResponse, TranscriptionRequest, TranscriptionResponse, ModerationRequest, ModerationResponse, ModerationResult, EmbeddingRequest, EmbeddingResponse } from "./providers/Provider.js";
|
|
17
20
|
export { resolveModelAlias } from "./model_aliases.js";
|
|
18
21
|
export { default as MODEL_ALIASES } from "./aliases.js";
|
|
19
22
|
export { ToolExecutionMode, DEFAULT_MAX_TOOL_CALLS, DEFAULT_MAX_RETRIES, DEFAULT_TOOL_EXECUTION, DEFAULT_OLLAMA_BASE_URL, DEFAULT_MODELS } from "./constants.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,cAAc,wBAAwB,CAAC;AAEvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,aAAa,EACb,eAAe,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,cAAc,EACd,cAAc,EACd,KAAK,EACL,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ export * from "./chat/ChatResponse.js";
|
|
|
6
6
|
export * from "./chat/Chat.js";
|
|
7
7
|
export * from "./chat/ChatStream.js";
|
|
8
8
|
export * from "./streaming/Stream.js";
|
|
9
|
+
export * from "./errors/index.js";
|
|
10
|
+
export * from "./middlewares/index.js";
|
|
9
11
|
export { z } from "zod";
|
|
10
12
|
export { NodeLLM, LegacyNodeLLM, createLLM, NodeLLMCore, Transcription, Moderation, Embedding, ModelRegistry, PricingRegistry } from "./llm.js";
|
|
11
13
|
export { config } from "./config.js";
|
package/dist/llm.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { Transcription } from "./transcription/Transcription.js";
|
|
|
8
8
|
import { Moderation } from "./moderation/Moderation.js";
|
|
9
9
|
import { Embedding } from "./embedding/Embedding.js";
|
|
10
10
|
import { NodeLLMConfig } from "./config.js";
|
|
11
|
+
import { Middleware } from "./types/Middleware.js";
|
|
11
12
|
export interface RetryOptions {
|
|
12
13
|
attempts?: number;
|
|
13
14
|
delayMs?: number;
|
|
@@ -15,6 +16,7 @@ export interface RetryOptions {
|
|
|
15
16
|
type LLMConfig = {
|
|
16
17
|
provider?: Provider | string;
|
|
17
18
|
retry?: RetryOptions;
|
|
19
|
+
middlewares?: Middleware[];
|
|
18
20
|
defaultChatModel?: string;
|
|
19
21
|
defaultTranscriptionModel?: string;
|
|
20
22
|
defaultModerationModel?: string;
|
|
@@ -24,10 +26,11 @@ export declare class NodeLLMCore {
|
|
|
24
26
|
readonly config: NodeLLMConfig;
|
|
25
27
|
readonly provider?: Provider | undefined;
|
|
26
28
|
readonly retry: Required<RetryOptions>;
|
|
29
|
+
readonly middlewares: Middleware[];
|
|
27
30
|
private readonly defaults;
|
|
28
31
|
readonly models: typeof ModelRegistry;
|
|
29
32
|
readonly pricing: typeof PricingRegistry;
|
|
30
|
-
constructor(config: NodeLLMConfig, provider?: Provider | undefined, retry?: Required<RetryOptions>, defaults?: {
|
|
33
|
+
constructor(config: NodeLLMConfig, provider?: Provider | undefined, retry?: Required<RetryOptions>, middlewares?: Middleware[], defaults?: {
|
|
31
34
|
chat?: string;
|
|
32
35
|
transcription?: string;
|
|
33
36
|
moderation?: string;
|
|
@@ -57,6 +60,7 @@ export declare class NodeLLMCore {
|
|
|
57
60
|
quality?: string;
|
|
58
61
|
assumeModelExists?: boolean;
|
|
59
62
|
requestTimeout?: number;
|
|
63
|
+
middlewares?: Middleware[];
|
|
60
64
|
}): Promise<GeneratedImage>;
|
|
61
65
|
transcribe(file: string, options?: {
|
|
62
66
|
model?: string;
|
|
@@ -66,17 +70,20 @@ export declare class NodeLLMCore {
|
|
|
66
70
|
speakerReferences?: string[];
|
|
67
71
|
assumeModelExists?: boolean;
|
|
68
72
|
requestTimeout?: number;
|
|
73
|
+
middlewares?: Middleware[];
|
|
69
74
|
}): Promise<Transcription>;
|
|
70
75
|
moderate(input: string | string[], options?: {
|
|
71
76
|
model?: string;
|
|
72
77
|
assumeModelExists?: boolean;
|
|
73
78
|
requestTimeout?: number;
|
|
79
|
+
middlewares?: Middleware[];
|
|
74
80
|
}): Promise<Moderation>;
|
|
75
81
|
embed(input: string | string[], options?: {
|
|
76
82
|
model?: string;
|
|
77
83
|
dimensions?: number;
|
|
78
84
|
assumeModelExists?: boolean;
|
|
79
85
|
requestTimeout?: number;
|
|
86
|
+
middlewares?: Middleware[];
|
|
80
87
|
}): Promise<Embedding>;
|
|
81
88
|
}
|
|
82
89
|
export { Transcription, Moderation, Embedding, ModelRegistry, PricingRegistry };
|
package/dist/llm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAW9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAUrD,OAAO,EAAU,aAAa,EAAiB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
|