@node-llm/core 1.5.4 → 1.6.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 +57 -41
- package/dist/aliases.js +239 -239
- package/dist/chat/Chat.d.ts +17 -17
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +56 -42
- package/dist/chat/ChatOptions.d.ts +8 -9
- package/dist/chat/ChatOptions.d.ts.map +1 -1
- package/dist/chat/ChatResponse.d.ts +1 -1
- package/dist/chat/ChatResponse.d.ts.map +1 -1
- package/dist/chat/ChatResponse.js +22 -8
- package/dist/chat/ChatStream.d.ts.map +1 -1
- package/dist/chat/ChatStream.js +14 -21
- package/dist/chat/Content.d.ts +3 -3
- package/dist/chat/Content.d.ts.map +1 -1
- package/dist/chat/Content.js +3 -6
- package/dist/chat/Message.d.ts +3 -1
- package/dist/chat/Message.d.ts.map +1 -1
- package/dist/chat/Role.d.ts.map +1 -1
- package/dist/chat/Tool.d.ts +15 -15
- package/dist/chat/Tool.d.ts.map +1 -1
- package/dist/chat/Tool.js +9 -7
- package/dist/chat/ToolHandler.d.ts +4 -3
- package/dist/chat/ToolHandler.d.ts.map +1 -1
- package/dist/chat/ToolHandler.js +10 -15
- package/dist/chat/Validation.d.ts.map +1 -1
- package/dist/chat/Validation.js +9 -3
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +80 -25
- package/dist/constants.js +1 -1
- package/dist/errors/index.d.ts +21 -7
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +14 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/llm.d.ts +44 -46
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +201 -130
- package/dist/model_aliases.d.ts.map +1 -1
- package/dist/models/ModelRegistry.d.ts.map +1 -1
- package/dist/models/ModelRegistry.js +12 -10
- package/dist/models/PricingRegistry.d.ts +31 -0
- package/dist/models/PricingRegistry.d.ts.map +1 -0
- package/dist/models/PricingRegistry.js +101 -0
- package/dist/models/models.d.ts.map +1 -1
- package/dist/models/models.js +5954 -7352
- package/dist/models/types.d.ts +37 -34
- package/dist/models/types.d.ts.map +1 -1
- package/dist/moderation/Moderation.d.ts.map +1 -1
- package/dist/moderation/Moderation.js +15 -5
- package/dist/providers/BaseProvider.d.ts +12 -8
- package/dist/providers/BaseProvider.d.ts.map +1 -1
- package/dist/providers/BaseProvider.js +17 -7
- package/dist/providers/Provider.d.ts +20 -5
- package/dist/providers/Provider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.d.ts +1 -1
- package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.js +3 -3
- package/dist/providers/anthropic/Capabilities.d.ts +2 -1
- package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
- package/dist/providers/anthropic/Capabilities.js +3 -20
- package/dist/providers/anthropic/Chat.d.ts.map +1 -1
- package/dist/providers/anthropic/Chat.js +27 -17
- package/dist/providers/anthropic/Errors.d.ts.map +1 -1
- package/dist/providers/anthropic/Errors.js +5 -2
- package/dist/providers/anthropic/Models.d.ts.map +1 -1
- package/dist/providers/anthropic/Models.js +6 -6
- package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
- package/dist/providers/anthropic/Streaming.js +17 -12
- package/dist/providers/anthropic/Utils.js +8 -5
- package/dist/providers/anthropic/index.d.ts.map +1 -1
- package/dist/providers/anthropic/index.js +4 -3
- package/dist/providers/anthropic/types.d.ts +11 -4
- package/dist/providers/anthropic/types.d.ts.map +1 -1
- package/dist/providers/deepseek/Capabilities.d.ts +7 -5
- package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
- package/dist/providers/deepseek/Capabilities.js +9 -5
- package/dist/providers/deepseek/Chat.d.ts.map +1 -1
- package/dist/providers/deepseek/Chat.js +10 -9
- package/dist/providers/deepseek/DeepSeekProvider.d.ts +1 -1
- package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/deepseek/DeepSeekProvider.js +4 -4
- package/dist/providers/deepseek/Models.d.ts.map +1 -1
- package/dist/providers/deepseek/Models.js +7 -7
- package/dist/providers/deepseek/Streaming.d.ts.map +1 -1
- package/dist/providers/deepseek/Streaming.js +11 -8
- package/dist/providers/deepseek/index.d.ts.map +1 -1
- package/dist/providers/deepseek/index.js +5 -4
- package/dist/providers/gemini/Capabilities.d.ts +5 -33
- package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
- package/dist/providers/gemini/Capabilities.js +7 -30
- package/dist/providers/gemini/Chat.d.ts.map +1 -1
- package/dist/providers/gemini/Chat.js +24 -19
- package/dist/providers/gemini/ChatUtils.d.ts.map +1 -1
- package/dist/providers/gemini/ChatUtils.js +10 -10
- package/dist/providers/gemini/Embeddings.d.ts.map +1 -1
- package/dist/providers/gemini/Embeddings.js +2 -2
- package/dist/providers/gemini/Errors.d.ts.map +1 -1
- package/dist/providers/gemini/Errors.js +5 -2
- package/dist/providers/gemini/GeminiProvider.d.ts +1 -1
- package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/gemini/GeminiProvider.js +3 -3
- package/dist/providers/gemini/Image.d.ts.map +1 -1
- package/dist/providers/gemini/Image.js +7 -7
- package/dist/providers/gemini/Models.d.ts.map +1 -1
- package/dist/providers/gemini/Models.js +6 -6
- package/dist/providers/gemini/Streaming.d.ts.map +1 -1
- package/dist/providers/gemini/Streaming.js +18 -14
- package/dist/providers/gemini/Transcription.d.ts.map +1 -1
- package/dist/providers/gemini/Transcription.js +11 -11
- package/dist/providers/gemini/index.d.ts +1 -1
- package/dist/providers/gemini/index.d.ts.map +1 -1
- package/dist/providers/gemini/index.js +5 -4
- package/dist/providers/gemini/types.d.ts +4 -4
- package/dist/providers/gemini/types.d.ts.map +1 -1
- package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
- package/dist/providers/ollama/Capabilities.js +6 -2
- package/dist/providers/ollama/Models.js +1 -1
- package/dist/providers/ollama/OllamaProvider.d.ts +1 -1
- package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
- package/dist/providers/ollama/OllamaProvider.js +2 -2
- package/dist/providers/ollama/index.d.ts +1 -1
- package/dist/providers/ollama/index.d.ts.map +1 -1
- package/dist/providers/ollama/index.js +7 -3
- package/dist/providers/openai/Capabilities.d.ts +2 -1
- package/dist/providers/openai/Capabilities.d.ts.map +1 -1
- package/dist/providers/openai/Capabilities.js +9 -21
- package/dist/providers/openai/Chat.d.ts.map +1 -1
- package/dist/providers/openai/Chat.js +18 -15
- package/dist/providers/openai/Embedding.d.ts.map +1 -1
- package/dist/providers/openai/Embedding.js +11 -7
- package/dist/providers/openai/Errors.d.ts.map +1 -1
- package/dist/providers/openai/Errors.js +5 -2
- package/dist/providers/openai/Image.d.ts.map +1 -1
- package/dist/providers/openai/Image.js +6 -6
- package/dist/providers/openai/Models.d.ts +1 -1
- package/dist/providers/openai/Models.d.ts.map +1 -1
- package/dist/providers/openai/Models.js +12 -8
- package/dist/providers/openai/Moderation.d.ts.map +1 -1
- package/dist/providers/openai/Moderation.js +6 -6
- package/dist/providers/openai/OpenAIProvider.d.ts +2 -3
- package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/openai/OpenAIProvider.js +4 -4
- package/dist/providers/openai/Streaming.d.ts.map +1 -1
- package/dist/providers/openai/Streaming.js +18 -13
- package/dist/providers/openai/Transcription.d.ts.map +1 -1
- package/dist/providers/openai/Transcription.js +15 -12
- package/dist/providers/openai/index.d.ts +1 -1
- package/dist/providers/openai/index.d.ts.map +1 -1
- package/dist/providers/openai/index.js +6 -5
- package/dist/providers/openai/types.d.ts +1 -1
- package/dist/providers/openai/utils.js +2 -2
- package/dist/providers/openrouter/Capabilities.d.ts +3 -3
- package/dist/providers/openrouter/Capabilities.d.ts.map +1 -1
- package/dist/providers/openrouter/Capabilities.js +21 -24
- package/dist/providers/openrouter/Models.d.ts.map +1 -1
- package/dist/providers/openrouter/Models.js +20 -16
- package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/openrouter/OpenRouterProvider.js +1 -1
- package/dist/providers/openrouter/index.d.ts +1 -1
- package/dist/providers/openrouter/index.d.ts.map +1 -1
- package/dist/providers/openrouter/index.js +6 -5
- package/dist/providers/registry.d.ts +18 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +17 -2
- package/dist/providers/utils.js +1 -1
- package/dist/schema/Schema.d.ts +3 -3
- package/dist/schema/Schema.d.ts.map +1 -1
- package/dist/schema/Schema.js +2 -2
- package/dist/schema/to-json-schema.d.ts +1 -1
- package/dist/schema/to-json-schema.d.ts.map +1 -1
- package/dist/streaming/Stream.d.ts.map +1 -1
- package/dist/streaming/Stream.js +3 -3
- package/dist/utils/Binary.d.ts.map +1 -1
- package/dist/utils/Binary.js +23 -13
- package/dist/utils/FileLoader.d.ts.map +1 -1
- package/dist/utils/FileLoader.js +25 -4
- package/dist/utils/audio.js +1 -1
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js +3 -2
- package/dist/utils/logger.d.ts +3 -3
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +2 -2
- package/package.json +1 -1
|
@@ -32,14 +32,17 @@ export class OpenAITranscription {
|
|
|
32
32
|
if (request.language) {
|
|
33
33
|
formData.append("language", request.language);
|
|
34
34
|
}
|
|
35
|
-
const url = buildUrl(this.baseUrl,
|
|
36
|
-
logger.logRequest("OpenAI", "POST", url, {
|
|
35
|
+
const url = buildUrl(this.baseUrl, "/audio/transcriptions");
|
|
36
|
+
logger.logRequest("OpenAI", "POST", url, {
|
|
37
|
+
model: request.model || DEFAULT_MODELS.TRANSCRIPTION,
|
|
38
|
+
file: fileName
|
|
39
|
+
});
|
|
37
40
|
const response = await fetchWithTimeout(url, {
|
|
38
41
|
method: "POST",
|
|
39
42
|
headers: {
|
|
40
|
-
|
|
43
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
41
44
|
},
|
|
42
|
-
body: formData
|
|
45
|
+
body: formData
|
|
43
46
|
}, request.requestTimeout);
|
|
44
47
|
if (!response.ok) {
|
|
45
48
|
await handleOpenAIError(response, request.model || DEFAULT_MODELS.TRANSCRIPTION);
|
|
@@ -50,7 +53,7 @@ export class OpenAITranscription {
|
|
|
50
53
|
text: json.text,
|
|
51
54
|
model: json.model || request.model || DEFAULT_MODELS.TRANSCRIPTION,
|
|
52
55
|
duration: json.duration || estimatedDuration,
|
|
53
|
-
segments: json.segments?.map(s => ({
|
|
56
|
+
segments: json.segments?.map((s) => ({
|
|
54
57
|
id: s.id,
|
|
55
58
|
start: s.start,
|
|
56
59
|
end: s.end,
|
|
@@ -62,7 +65,7 @@ export class OpenAITranscription {
|
|
|
62
65
|
const { data, fileName, duration: estimatedDuration } = await AudioUtils.load(request.file);
|
|
63
66
|
const base64Audio = Buffer.from(data).toString("base64");
|
|
64
67
|
const model = request.model || "gpt-4o";
|
|
65
|
-
|
|
68
|
+
const actualModel = "gpt-4o-audio-preview";
|
|
66
69
|
let defaultPrompt = "Transcribe the audio exactly. Return only the transcription text.";
|
|
67
70
|
let isDiarization = false;
|
|
68
71
|
if (model.includes("diarize")) {
|
|
@@ -125,15 +128,15 @@ export class OpenAITranscription {
|
|
|
125
128
|
}
|
|
126
129
|
]
|
|
127
130
|
};
|
|
128
|
-
const url = buildUrl(this.baseUrl,
|
|
131
|
+
const url = buildUrl(this.baseUrl, "/chat/completions");
|
|
129
132
|
logger.logRequest("OpenAI", "POST", url, body);
|
|
130
133
|
const response = await fetchWithTimeout(url, {
|
|
131
134
|
method: "POST",
|
|
132
135
|
headers: {
|
|
133
|
-
|
|
134
|
-
"Content-Type": "application/json"
|
|
136
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
137
|
+
"Content-Type": "application/json"
|
|
135
138
|
},
|
|
136
|
-
body: JSON.stringify(body)
|
|
139
|
+
body: JSON.stringify(body)
|
|
137
140
|
}, request.requestTimeout);
|
|
138
141
|
if (!response.ok) {
|
|
139
142
|
await handleOpenAIError(response, actualModel);
|
|
@@ -154,10 +157,10 @@ export class OpenAITranscription {
|
|
|
154
157
|
text: s.text || "",
|
|
155
158
|
speaker: s.speaker
|
|
156
159
|
}));
|
|
157
|
-
text = segments.map(s => `${s.speaker}: ${s.text}`).join("\n");
|
|
160
|
+
text = segments.map((s) => `${s.speaker}: ${s.text}`).join("\n");
|
|
158
161
|
}
|
|
159
162
|
}
|
|
160
|
-
catch
|
|
163
|
+
catch {
|
|
161
164
|
text = content;
|
|
162
165
|
}
|
|
163
166
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/index.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/index.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,sBAAsB,SAgBrC;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,+BAAyB,CAAC"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { config } from "../../config.js";
|
|
1
|
+
import { config as globalConfig } from "../../config.js";
|
|
2
2
|
import { providerRegistry } from "../registry.js";
|
|
3
3
|
import { OpenAIProvider } from "./OpenAIProvider.js";
|
|
4
4
|
let registered = false;
|
|
5
5
|
/**
|
|
6
6
|
* Idempotent registration of the OpenAI provider.
|
|
7
|
-
* Automatically called
|
|
7
|
+
* Automatically called when using createLLM({ provider: 'openai' })
|
|
8
8
|
*/
|
|
9
9
|
export function registerOpenAIProvider() {
|
|
10
10
|
if (registered)
|
|
11
11
|
return;
|
|
12
|
-
providerRegistry.register("openai", () => {
|
|
13
|
-
const
|
|
14
|
-
const
|
|
12
|
+
providerRegistry.register("openai", (config) => {
|
|
13
|
+
const cfg = config || globalConfig;
|
|
14
|
+
const apiKey = cfg.openaiApiKey;
|
|
15
|
+
const baseUrl = cfg.openaiApiBase;
|
|
15
16
|
if (!apiKey) {
|
|
16
17
|
throw new Error("openaiApiKey is not set in config or OPENAI_API_KEY environment variable");
|
|
17
18
|
}
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* // => 'https://resource.azure.com/openai/deployments/gpt-4/chat/completions?api-version=2024-08-01'
|
|
18
18
|
*/
|
|
19
19
|
export function buildUrl(baseUrl, endpoint) {
|
|
20
|
-
if (baseUrl.includes(
|
|
21
|
-
const [basePath, queryString] = baseUrl.split(
|
|
20
|
+
if (baseUrl.includes("?")) {
|
|
21
|
+
const [basePath, queryString] = baseUrl.split("?");
|
|
22
22
|
return `${basePath}${endpoint}?${queryString}`;
|
|
23
23
|
}
|
|
24
24
|
return `${baseUrl}${endpoint}`;
|
|
@@ -4,9 +4,9 @@ export declare class OpenRouterCapabilities {
|
|
|
4
4
|
static supportsTools(model: string): boolean;
|
|
5
5
|
static supportsStructuredOutput(model: string): boolean;
|
|
6
6
|
static supportsEmbeddings(model: string): boolean;
|
|
7
|
-
static supportsImageGeneration(
|
|
8
|
-
static supportsTranscription(
|
|
9
|
-
static supportsModeration(
|
|
7
|
+
static supportsImageGeneration(_model: string): boolean;
|
|
8
|
+
static supportsTranscription(_model: string): boolean;
|
|
9
|
+
static supportsModeration(_model: string): boolean;
|
|
10
10
|
static supportsReasoning(model: string): boolean;
|
|
11
11
|
static getContextWindow(model: string): number | null;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/Capabilities.ts"],"names":[],"mappings":"AAEA,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/Capabilities.ts"],"names":[],"mappings":"AAEA,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAiB7C,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAU5C,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAQvD,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAQjD,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIvD,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIrD,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAahD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAItD"}
|
|
@@ -6,20 +6,20 @@ export class OpenRouterCapabilities {
|
|
|
6
6
|
static supportsVision(model) {
|
|
7
7
|
const info = this.findModel(model);
|
|
8
8
|
if (info)
|
|
9
|
-
return info.capabilities.includes(
|
|
9
|
+
return info.capabilities.includes("vision") || info.modalities.input.includes("image");
|
|
10
10
|
// Fallback heuristics
|
|
11
|
-
return model.includes(
|
|
12
|
-
model.includes(
|
|
13
|
-
model.includes(
|
|
14
|
-
model.includes(
|
|
15
|
-
model.includes(
|
|
16
|
-
model.includes(
|
|
17
|
-
model.includes(
|
|
11
|
+
return (model.includes("vision") ||
|
|
12
|
+
model.includes("gpt-4o") ||
|
|
13
|
+
model.includes("claude-3") ||
|
|
14
|
+
model.includes("gemini-1.5") ||
|
|
15
|
+
model.includes("gemini-2.0") ||
|
|
16
|
+
model.includes("flash") ||
|
|
17
|
+
model.includes("gemini-pro-vision"));
|
|
18
18
|
}
|
|
19
19
|
static supportsTools(model) {
|
|
20
20
|
const info = this.findModel(model);
|
|
21
21
|
if (info)
|
|
22
|
-
return info.capabilities.includes(
|
|
22
|
+
return info.capabilities.includes("tools") || info.capabilities.includes("function_calling");
|
|
23
23
|
// Fallback: Default to true for OpenRouter as most models support tools
|
|
24
24
|
// but this is the "honest" check we wanted.
|
|
25
25
|
return true;
|
|
@@ -27,38 +27,35 @@ export class OpenRouterCapabilities {
|
|
|
27
27
|
static supportsStructuredOutput(model) {
|
|
28
28
|
const info = this.findModel(model);
|
|
29
29
|
if (info)
|
|
30
|
-
return info.capabilities.includes(
|
|
30
|
+
return info.capabilities.includes("structured_output") || info.id.includes("gpt-4");
|
|
31
31
|
// Fallback heuristics
|
|
32
|
-
return model.includes(
|
|
33
|
-
model.includes('gpt-3.5') ||
|
|
34
|
-
model.includes('claude-3');
|
|
32
|
+
return model.includes("gpt-4") || model.includes("gpt-3.5") || model.includes("claude-3");
|
|
35
33
|
}
|
|
36
34
|
static supportsEmbeddings(model) {
|
|
37
35
|
const info = this.findModel(model);
|
|
38
36
|
if (info)
|
|
39
|
-
return info.capabilities.includes(
|
|
37
|
+
return info.capabilities.includes("embeddings");
|
|
40
38
|
// Fallback heuristics
|
|
41
|
-
return model.includes(
|
|
42
|
-
model.includes('text-sdk');
|
|
39
|
+
return model.includes("embedding") || model.includes("text-sdk");
|
|
43
40
|
}
|
|
44
|
-
static supportsImageGeneration(
|
|
41
|
+
static supportsImageGeneration(_model) {
|
|
45
42
|
return false;
|
|
46
43
|
}
|
|
47
|
-
static supportsTranscription(
|
|
44
|
+
static supportsTranscription(_model) {
|
|
48
45
|
return false;
|
|
49
46
|
}
|
|
50
|
-
static supportsModeration(
|
|
47
|
+
static supportsModeration(_model) {
|
|
51
48
|
return false;
|
|
52
49
|
}
|
|
53
50
|
static supportsReasoning(model) {
|
|
54
51
|
const info = this.findModel(model);
|
|
55
52
|
if (info)
|
|
56
|
-
return info.capabilities.includes(
|
|
53
|
+
return info.capabilities.includes("reasoning");
|
|
57
54
|
// Fallback heuristics
|
|
58
|
-
return model.includes(
|
|
59
|
-
model.includes(
|
|
60
|
-
model.includes(
|
|
61
|
-
model.includes(
|
|
55
|
+
return (model.includes("o1") ||
|
|
56
|
+
model.includes("o3") ||
|
|
57
|
+
model.includes("deepseek-r1") ||
|
|
58
|
+
model.includes("qwq"));
|
|
62
59
|
}
|
|
63
60
|
static getContextWindow(model) {
|
|
64
61
|
const info = this.findModel(model);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Models.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/Models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAwB3C,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAiBrC,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"Models.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/Models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAwB3C,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAiBrC,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,YAAY;CA6BrB"}
|
|
@@ -8,9 +8,9 @@ export class OpenRouterModels {
|
|
|
8
8
|
async execute() {
|
|
9
9
|
const response = await fetch(`${this.baseUrl}/models`, {
|
|
10
10
|
headers: {
|
|
11
|
-
|
|
12
|
-
"Content-Type": "application/json"
|
|
13
|
-
}
|
|
11
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
12
|
+
"Content-Type": "application/json"
|
|
13
|
+
}
|
|
14
14
|
});
|
|
15
15
|
if (!response.ok) {
|
|
16
16
|
throw new Error(`OpenRouter API error: ${response.status}`);
|
|
@@ -19,7 +19,7 @@ export class OpenRouterModels {
|
|
|
19
19
|
return data.data.map((model) => this.parseModel(model));
|
|
20
20
|
}
|
|
21
21
|
parseModel(model) {
|
|
22
|
-
const family = model.id.split(
|
|
22
|
+
const family = model.id.split("/")[0] || "";
|
|
23
23
|
return {
|
|
24
24
|
id: model.id,
|
|
25
25
|
name: model.name,
|
|
@@ -46,18 +46,21 @@ export class OpenRouterModels {
|
|
|
46
46
|
const caps = [];
|
|
47
47
|
const params = model.supported_parameters || [];
|
|
48
48
|
const inputModalities = model.architecture?.input_modalities || [];
|
|
49
|
-
if (params.includes(
|
|
50
|
-
caps.push(
|
|
49
|
+
if (params.includes("tools") || params.includes("function_calling")) {
|
|
50
|
+
caps.push("tools");
|
|
51
51
|
}
|
|
52
|
-
if (inputModalities.includes(
|
|
53
|
-
caps.push(
|
|
52
|
+
if (inputModalities.includes("image")) {
|
|
53
|
+
caps.push("vision");
|
|
54
54
|
}
|
|
55
|
-
if (model.id.includes(
|
|
56
|
-
caps.push(
|
|
55
|
+
if (model.id.includes("embedding") || model.id.includes("text-sdk")) {
|
|
56
|
+
caps.push("embeddings");
|
|
57
57
|
}
|
|
58
58
|
// Heuristics for reasoning
|
|
59
|
-
if (model.id.includes(
|
|
60
|
-
|
|
59
|
+
if (model.id.includes("o1") ||
|
|
60
|
+
model.id.includes("o3") ||
|
|
61
|
+
model.id.includes("deepseek-r1") ||
|
|
62
|
+
model.id.includes("qwq")) {
|
|
63
|
+
caps.push("reasoning");
|
|
61
64
|
}
|
|
62
65
|
return caps;
|
|
63
66
|
}
|
|
@@ -71,17 +74,18 @@ export class OpenRouterModels {
|
|
|
71
74
|
const completion = parseFloat(pricing.completion);
|
|
72
75
|
const cachedInput = pricing.input_cache_read ? parseFloat(pricing.input_cache_read) : 0;
|
|
73
76
|
const reasoning = pricing.internal_reasoning ? parseFloat(pricing.internal_reasoning) : 0;
|
|
77
|
+
const standard = result.text_tokens.standard;
|
|
74
78
|
if (prompt > 0) {
|
|
75
|
-
|
|
79
|
+
standard.input_per_million = prompt * 1_000_000;
|
|
76
80
|
}
|
|
77
81
|
if (completion > 0) {
|
|
78
|
-
|
|
82
|
+
standard.output_per_million = completion * 1_000_000;
|
|
79
83
|
}
|
|
80
84
|
if (cachedInput > 0) {
|
|
81
|
-
|
|
85
|
+
standard.cached_input_per_million = cachedInput * 1_000_000;
|
|
82
86
|
}
|
|
83
87
|
if (reasoning > 0) {
|
|
84
|
-
|
|
88
|
+
standard.reasoning_output_per_million = reasoning * 1_000_000;
|
|
85
89
|
}
|
|
86
90
|
return result;
|
|
87
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,kBAAmB,SAAQ,cAAc;IAC7C,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;
|
|
1
|
+
{"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,kBAAmB,SAAQ,cAAc;IAC7C,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCAEZ,MAAM;yCACD,MAAM;uCAER,MAAM;oCACT,MAAM;mCACP,MAAM;wCACD,MAAM;kCACZ,MAAM;MAChC;gBAEU,OAAO,EAAE,yBAAyB;IAO9C,SAAS,CAAC,YAAY,IAAI,MAAM;CAGjC"}
|
|
@@ -11,7 +11,7 @@ export class OpenRouterProvider extends OpenAIProvider {
|
|
|
11
11
|
supportsModeration: (model) => OpenRouterCapabilities.supportsModeration(model),
|
|
12
12
|
supportsReasoning: (model) => OpenRouterCapabilities.supportsReasoning(model),
|
|
13
13
|
supportsDeveloperRole: (_model) => true,
|
|
14
|
-
getContextWindow: (model) => OpenRouterCapabilities.getContextWindow(model) || null
|
|
14
|
+
getContextWindow: (model) => OpenRouterCapabilities.getContextWindow(model) || null
|
|
15
15
|
};
|
|
16
16
|
constructor(options) {
|
|
17
17
|
super({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from "./OpenRouterProvider.js";
|
|
2
2
|
/**
|
|
3
3
|
* Idempotent registration of the OpenRouter provider.
|
|
4
|
-
* Automatically called
|
|
4
|
+
* Automatically called when using createLLM({ provider: 'openrouter' })
|
|
5
5
|
*/
|
|
6
6
|
export declare function registerOpenRouterProvider(): void;
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAC;AAIxC;;;GAGG;AACH,wBAAgB,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAC;AAIxC;;;GAGG;AACH,wBAAgB,0BAA0B,SAkBzC;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,mCAA6B,CAAC"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { config } from "../../config.js";
|
|
1
|
+
import { config as globalConfig } from "../../config.js";
|
|
2
2
|
import { providerRegistry } from "../registry.js";
|
|
3
3
|
import { OpenRouterProvider } from "./OpenRouterProvider.js";
|
|
4
4
|
export * from "./OpenRouterProvider.js";
|
|
5
5
|
let registered = false;
|
|
6
6
|
/**
|
|
7
7
|
* Idempotent registration of the OpenRouter provider.
|
|
8
|
-
* Automatically called
|
|
8
|
+
* Automatically called when using createLLM({ provider: 'openrouter' })
|
|
9
9
|
*/
|
|
10
10
|
export function registerOpenRouterProvider() {
|
|
11
11
|
if (registered)
|
|
12
12
|
return;
|
|
13
|
-
providerRegistry.register("openrouter", () => {
|
|
14
|
-
const
|
|
15
|
-
const
|
|
13
|
+
providerRegistry.register("openrouter", (config) => {
|
|
14
|
+
const cfg = config || globalConfig;
|
|
15
|
+
const apiKey = cfg.openrouterApiKey;
|
|
16
|
+
const baseUrl = cfg.openrouterApiBase;
|
|
16
17
|
if (!apiKey) {
|
|
17
18
|
throw new Error("openrouterApiKey is not set in config or OPENROUTER_API_KEY environment variable");
|
|
18
19
|
}
|
|
@@ -5,7 +5,8 @@ import { registerGeminiProvider } from "./gemini/index.js";
|
|
|
5
5
|
import { registerDeepSeekProvider } from "./deepseek/index.js";
|
|
6
6
|
import { registerOllamaProvider } from "./ollama/index.js";
|
|
7
7
|
import { registerOpenRouterProvider } from "./openrouter/index.js";
|
|
8
|
-
|
|
8
|
+
import { NodeLLMConfig } from "../config.js";
|
|
9
|
+
type ProviderFactory = (config?: NodeLLMConfig) => Provider;
|
|
9
10
|
declare class ProviderRegistry {
|
|
10
11
|
private providers;
|
|
11
12
|
/**
|
|
@@ -15,7 +16,7 @@ declare class ProviderRegistry {
|
|
|
15
16
|
/**
|
|
16
17
|
* Resolve a provider by name
|
|
17
18
|
*/
|
|
18
|
-
resolve(name: string): Provider;
|
|
19
|
+
resolve(name: string, config?: NodeLLMConfig): Provider;
|
|
19
20
|
/**
|
|
20
21
|
* Check if a provider is registered
|
|
21
22
|
*/
|
|
@@ -25,6 +26,21 @@ declare class ProviderRegistry {
|
|
|
25
26
|
*/
|
|
26
27
|
list(): string[];
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Global provider registry.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
* This is an internal implementation detail. Use `NodeLLM.registerProvider()`
|
|
34
|
+
* or `createLLM()` instead of accessing this directly.
|
|
35
|
+
*
|
|
36
|
+
* **For custom providers**, use the public API:
|
|
37
|
+
* ```typescript
|
|
38
|
+
* import { NodeLLM, BaseProvider } from '@node-llm/core';
|
|
39
|
+
*
|
|
40
|
+
* class MyProvider extends BaseProvider { ... }
|
|
41
|
+
* NodeLLM.registerProvider("my-provider", () => new MyProvider());
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
28
44
|
export declare const providerRegistry: ProviderRegistry;
|
|
29
45
|
export { registerOpenAIProvider as ensureOpenAIRegistered, registerOpenAIProvider, registerAnthropicProvider, registerGeminiProvider, registerDeepSeekProvider, registerOllamaProvider, registerOpenRouterProvider };
|
|
30
46
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,KAAK,eAAe,GAAG,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,KAAK,eAAe,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,KAAK,QAAQ,CAAC;AAE5D,cAAM,gBAAgB;IACpB,OAAO,CAAC,SAAS,CAAsC;IAEvD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAQtD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,QAAQ;IAUvD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAGvD,OAAO,EACL,sBAAsB,IAAI,sBAAsB,EAChD,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC3B,CAAC"}
|
|
@@ -18,12 +18,12 @@ class ProviderRegistry {
|
|
|
18
18
|
/**
|
|
19
19
|
* Resolve a provider by name
|
|
20
20
|
*/
|
|
21
|
-
resolve(name) {
|
|
21
|
+
resolve(name, config) {
|
|
22
22
|
const factory = this.providers.get(name);
|
|
23
23
|
if (!factory) {
|
|
24
24
|
throw new Error(`Unknown LLM provider '${name}'`);
|
|
25
25
|
}
|
|
26
|
-
return factory();
|
|
26
|
+
return factory(config);
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Check if a provider is registered
|
|
@@ -38,6 +38,21 @@ class ProviderRegistry {
|
|
|
38
38
|
return [...this.providers.keys()];
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Global provider registry.
|
|
43
|
+
*
|
|
44
|
+
* @internal
|
|
45
|
+
* This is an internal implementation detail. Use `NodeLLM.registerProvider()`
|
|
46
|
+
* or `createLLM()` instead of accessing this directly.
|
|
47
|
+
*
|
|
48
|
+
* **For custom providers**, use the public API:
|
|
49
|
+
* ```typescript
|
|
50
|
+
* import { NodeLLM, BaseProvider } from '@node-llm/core';
|
|
51
|
+
*
|
|
52
|
+
* class MyProvider extends BaseProvider { ... }
|
|
53
|
+
* NodeLLM.registerProvider("my-provider", () => new MyProvider());
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
41
56
|
export const providerRegistry = new ProviderRegistry();
|
|
42
57
|
// Exported registration functions (delegates to provider-specific index files)
|
|
43
58
|
export { registerOpenAIProvider as ensureOpenAIRegistered, registerOpenAIProvider, registerAnthropicProvider, registerGeminiProvider, registerDeepSeekProvider, registerOllamaProvider, registerOpenRouterProvider };
|
package/dist/providers/utils.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* If supportsDeveloperRole is false, both "system" and "developer" messages are mapped to "system".
|
|
5
5
|
*/
|
|
6
6
|
export function mapSystemMessages(messages, supportsDeveloperRole) {
|
|
7
|
-
return messages.map(msg => {
|
|
7
|
+
return messages.map((msg) => {
|
|
8
8
|
if (msg.role === "system" || msg.role === "developer") {
|
|
9
9
|
return {
|
|
10
10
|
...msg,
|
package/dist/schema/Schema.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export interface SchemaDefinition {
|
|
3
3
|
name: string;
|
|
4
|
-
schema: z.ZodType<
|
|
4
|
+
schema: z.ZodType<unknown> | Record<string, unknown>;
|
|
5
5
|
description?: string;
|
|
6
6
|
strict?: boolean;
|
|
7
7
|
}
|
|
8
8
|
export declare class Schema {
|
|
9
9
|
readonly definition: SchemaDefinition;
|
|
10
10
|
constructor(definition: SchemaDefinition);
|
|
11
|
-
static fromZod(name: string, schema: z.ZodType<
|
|
11
|
+
static fromZod(name: string, schema: z.ZodType<unknown>, options?: {
|
|
12
12
|
description?: string;
|
|
13
13
|
strict?: boolean;
|
|
14
14
|
}): Schema;
|
|
15
|
-
static fromJson(name: string, schema: Record<string,
|
|
15
|
+
static fromJson(name: string, schema: Record<string, unknown>, options?: {
|
|
16
16
|
description?: string;
|
|
17
17
|
strict?: boolean;
|
|
18
18
|
}): Schema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/schema/Schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/schema/Schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,MAAM;aACW,UAAU,EAAE,gBAAgB;gBAA5B,UAAU,EAAE,gBAAgB;IAExD,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAC1B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GACnD,MAAM;IAST,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GACnD,MAAM;CAQV"}
|
package/dist/schema/Schema.js
CHANGED
|
@@ -8,7 +8,7 @@ export class Schema {
|
|
|
8
8
|
name,
|
|
9
9
|
schema,
|
|
10
10
|
description: options?.description,
|
|
11
|
-
strict: options?.strict
|
|
11
|
+
strict: options?.strict
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
static fromJson(name, schema, options) {
|
|
@@ -16,7 +16,7 @@ export class Schema {
|
|
|
16
16
|
name,
|
|
17
17
|
schema,
|
|
18
18
|
description: options?.description,
|
|
19
|
-
strict: options?.strict
|
|
19
|
+
strict: options?.strict
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
export declare function toJsonSchema(schema: z.ZodType<
|
|
2
|
+
export declare function toJsonSchema(schema: z.ZodType<unknown> | Record<string, unknown>): Record<string, unknown>;
|
|
3
3
|
//# sourceMappingURL=to-json-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-json-schema.d.ts","sourceRoot":"","sources":["../../src/schema/to-json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,wBAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"to-json-schema.d.ts","sourceRoot":"","sources":["../../src/schema/to-json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,wBAAgB,YAAY,CAC1B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stream.d.ts","sourceRoot":"","sources":["../../src/streaming/Stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Stream.d.ts","sourceRoot":"","sources":["../../src/streaming/Stream.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,qBAAa,MAAM,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAI9C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU,CAAC;IAJrB,OAAO,CAAC,QAAQ,CAAS;gBAGf,QAAQ,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,EAChC,UAAU,CAAC,EAAE,eAAe,YAAA;IAGtC;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC;IAIhG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAQ1C;;;OAGG;IACH,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAwB7B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAQ7B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/streaming/Stream.js
CHANGED
|
@@ -18,7 +18,7 @@ export class Stream {
|
|
|
18
18
|
}
|
|
19
19
|
[Symbol.asyncIterator]() {
|
|
20
20
|
if (this.consumed) {
|
|
21
|
-
throw new Error(
|
|
21
|
+
throw new Error("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");
|
|
22
22
|
}
|
|
23
23
|
this.consumed = true;
|
|
24
24
|
return this.iterator();
|
|
@@ -40,12 +40,12 @@ export class Stream {
|
|
|
40
40
|
right.push(result);
|
|
41
41
|
}
|
|
42
42
|
return queue.shift();
|
|
43
|
-
}
|
|
43
|
+
}
|
|
44
44
|
};
|
|
45
45
|
};
|
|
46
46
|
return [
|
|
47
47
|
new Stream(() => teeIterator(left), this.controller),
|
|
48
|
-
new Stream(() => teeIterator(right), this.controller)
|
|
48
|
+
new Stream(() => teeIterator(right), this.controller)
|
|
49
49
|
];
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Binary.d.ts","sourceRoot":"","sources":["../../src/utils/Binary.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB;;OAEG;WACU,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA0C9D,OAAO,CAAC,MAAM,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"Binary.d.ts","sourceRoot":"","sources":["../../src/utils/Binary.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB;;OAEG;WACU,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA0C9D,OAAO,CAAC,MAAM,CAAC,aAAa;CA0B7B"}
|