@node-llm/core 0.8.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +0 -167
  2. package/dist/aliases.json +126 -0
  3. package/dist/chat/Chat.d.ts +7 -3
  4. package/dist/chat/Chat.d.ts.map +1 -1
  5. package/dist/chat/Chat.js +6 -7
  6. package/dist/chat/ChatStream.d.ts +25 -0
  7. package/dist/chat/ChatStream.d.ts.map +1 -0
  8. package/dist/chat/ChatStream.js +93 -0
  9. package/dist/config.d.ts +5 -3
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +2 -0
  12. package/dist/embedding/Embedding.d.ts +1 -1
  13. package/dist/embedding/Embedding.d.ts.map +1 -1
  14. package/dist/errors/index.d.ts +22 -0
  15. package/dist/errors/index.d.ts.map +1 -1
  16. package/dist/errors/index.js +32 -0
  17. package/dist/index.d.ts +10 -15
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +10 -9
  20. package/dist/llm.d.ts +4 -3
  21. package/dist/llm.d.ts.map +1 -1
  22. package/dist/llm.js +44 -37
  23. package/dist/model_aliases.d.ts +3 -0
  24. package/dist/model_aliases.d.ts.map +1 -0
  25. package/dist/model_aliases.js +20 -0
  26. package/dist/models/ModelRegistry.d.ts +4 -0
  27. package/dist/models/ModelRegistry.d.ts.map +1 -1
  28. package/dist/models/ModelRegistry.js +15 -0
  29. package/dist/models/models.d.ts +729 -60
  30. package/dist/models/models.d.ts.map +1 -1
  31. package/dist/models/models.js +24375 -2312
  32. package/dist/models/types.d.ts +3 -3
  33. package/dist/models/types.d.ts.map +1 -1
  34. package/dist/models/types.js +3 -0
  35. package/dist/providers/BaseProvider.d.ts +23 -0
  36. package/dist/providers/BaseProvider.d.ts.map +1 -0
  37. package/dist/providers/BaseProvider.js +31 -0
  38. package/dist/providers/Provider.d.ts +17 -1
  39. package/dist/providers/Provider.d.ts.map +1 -1
  40. package/dist/providers/anthropic/AnthropicProvider.d.ts +6 -7
  41. package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
  42. package/dist/providers/anthropic/AnthropicProvider.js +16 -13
  43. package/dist/providers/anthropic/Streaming.d.ts +1 -1
  44. package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
  45. package/dist/providers/anthropic/Streaming.js +80 -54
  46. package/dist/providers/deepseek/Capabilities.js +1 -1
  47. package/dist/providers/deepseek/DeepSeekProvider.d.ts +5 -1
  48. package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
  49. package/dist/providers/deepseek/DeepSeekProvider.js +15 -1
  50. package/dist/providers/deepseek/Streaming.d.ts +1 -1
  51. package/dist/providers/deepseek/Streaming.d.ts.map +1 -1
  52. package/dist/providers/deepseek/Streaming.js +80 -48
  53. package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
  54. package/dist/providers/gemini/Embeddings.d.ts +1 -1
  55. package/dist/providers/gemini/Embeddings.d.ts.map +1 -1
  56. package/dist/providers/gemini/GeminiProvider.d.ts +6 -4
  57. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
  58. package/dist/providers/gemini/GeminiProvider.js +14 -4
  59. package/dist/providers/gemini/Streaming.d.ts +1 -1
  60. package/dist/providers/gemini/Streaming.d.ts.map +1 -1
  61. package/dist/providers/gemini/Streaming.js +62 -39
  62. package/dist/providers/gemini/index.d.ts +1 -1
  63. package/dist/providers/gemini/index.js +1 -1
  64. package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
  65. package/dist/providers/ollama/Capabilities.js +5 -1
  66. package/dist/providers/ollama/OllamaProvider.d.ts +1 -0
  67. package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
  68. package/dist/providers/ollama/OllamaProvider.js +3 -0
  69. package/dist/providers/ollama/index.d.ts +1 -1
  70. package/dist/providers/ollama/index.js +1 -1
  71. package/dist/providers/openai/Embedding.d.ts +1 -1
  72. package/dist/providers/openai/Embedding.d.ts.map +1 -1
  73. package/dist/providers/openai/OpenAIProvider.d.ts +6 -3
  74. package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
  75. package/dist/providers/openai/OpenAIProvider.js +15 -1
  76. package/dist/providers/openai/Streaming.d.ts +1 -1
  77. package/dist/providers/openai/Streaming.d.ts.map +1 -1
  78. package/dist/providers/openai/Streaming.js +75 -43
  79. package/dist/providers/openai/index.d.ts +1 -1
  80. package/dist/providers/openai/index.js +1 -1
  81. package/dist/providers/openrouter/Capabilities.d.ts +13 -0
  82. package/dist/providers/openrouter/Capabilities.d.ts.map +1 -0
  83. package/dist/providers/openrouter/Capabilities.js +67 -0
  84. package/dist/providers/openrouter/Models.d.ts +11 -0
  85. package/dist/providers/openrouter/Models.d.ts.map +1 -0
  86. package/dist/providers/openrouter/Models.js +88 -0
  87. package/dist/providers/openrouter/OpenRouterProvider.d.ts +21 -0
  88. package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -0
  89. package/dist/providers/openrouter/OpenRouterProvider.js +24 -0
  90. package/dist/providers/openrouter/index.d.ts +11 -0
  91. package/dist/providers/openrouter/index.d.ts.map +1 -0
  92. package/dist/providers/openrouter/index.js +26 -0
  93. package/dist/providers/registry.d.ts +11 -1
  94. package/dist/providers/registry.d.ts.map +1 -1
  95. package/dist/providers/registry.js +15 -1
  96. package/dist/streaming/Stream.d.ts +29 -0
  97. package/dist/streaming/Stream.d.ts.map +1 -0
  98. package/dist/streaming/Stream.js +67 -0
  99. package/dist/utils/FileLoader.d.ts.map +1 -1
  100. package/dist/utils/FileLoader.js +34 -3
  101. package/dist/utils/logger.d.ts +13 -0
  102. package/dist/utils/logger.d.ts.map +1 -0
  103. package/dist/utils/logger.js +24 -0
  104. package/package.json +2 -2
  105. package/dist/chat/Stream.d.ts +0 -21
  106. package/dist/chat/Stream.d.ts.map +0 -1
  107. package/dist/chat/Stream.js +0 -73
  108. package/dist/providers/Embedding.d.ts +0 -20
  109. package/dist/providers/Embedding.d.ts.map +0 -1
  110. package/dist/providers/Embedding.js +0 -1
@@ -41,9 +41,40 @@ const TEXT_EXTENSIONS = new Set([
41
41
  ]);
42
42
  export class FileLoader {
43
43
  static async load(filePath) {
44
- if (filePath.startsWith("http") || filePath.startsWith("data:")) {
45
- // Assume image URL for now if it looks like a URL
46
- // TODO: Better detection for remote file types
44
+ if (filePath.startsWith("http")) {
45
+ try {
46
+ const response = await fetch(filePath);
47
+ if (!response.ok)
48
+ throw new Error(`Failed to fetch file: ${response.statusText}`);
49
+ const buffer = await response.arrayBuffer();
50
+ const contentType = response.headers.get("content-type") || "image/jpeg";
51
+ const base64 = Buffer.from(buffer).toString("base64");
52
+ const dataUri = `data:${contentType};base64,${base64}`;
53
+ if (contentType.startsWith("image/")) {
54
+ return { type: "image_url", image_url: { url: dataUri } };
55
+ }
56
+ if (contentType.startsWith("audio/")) {
57
+ const format = contentType.split("/")[1];
58
+ return {
59
+ type: "input_audio",
60
+ input_audio: {
61
+ data: base64,
62
+ format: (format === "mpeg" ? "mp3" : format) ?? "wav"
63
+ }
64
+ };
65
+ }
66
+ if (contentType.startsWith("video/")) {
67
+ return { type: "video_url", video_url: { url: dataUri } };
68
+ }
69
+ // Default to image_url for unknown binary or use as-is
70
+ return { type: "image_url", image_url: { url: dataUri } };
71
+ }
72
+ catch (error) {
73
+ // Fallback to URL if fetch fails
74
+ return { type: "image_url", image_url: { url: filePath } };
75
+ }
76
+ }
77
+ if (filePath.startsWith("data:")) {
47
78
  return { type: "image_url", image_url: { url: filePath } };
48
79
  }
49
80
  const ext = path.extname(filePath).toLowerCase();
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Centralized logger for node-llm
3
+ */
4
+ declare class Logger {
5
+ private isDebugEnabled;
6
+ debug(message: string, data?: any): void;
7
+ warn(message: string): void;
8
+ error(message: string, error?: Error): void;
9
+ info(message: string): void;
10
+ }
11
+ export declare const logger: Logger;
12
+ export {};
13
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAM,MAAM;IACV,OAAO,CAAC,cAAc;IAItB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAOxC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAI3C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG5B;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Centralized logger for node-llm
3
+ */
4
+ class Logger {
5
+ isDebugEnabled() {
6
+ return process.env.NODELLM_DEBUG === "true";
7
+ }
8
+ debug(message, data) {
9
+ if (this.isDebugEnabled()) {
10
+ const formattedData = data ? `\n${JSON.stringify(data, null, 2)}` : '';
11
+ console.log(`[NodeLLM Debug] ${message}${formattedData}`);
12
+ }
13
+ }
14
+ warn(message) {
15
+ console.warn(`[NodeLLM] ${message}`);
16
+ }
17
+ error(message, error) {
18
+ console.error(`[NodeLLM Error] ${message}`, error || '');
19
+ }
20
+ info(message) {
21
+ console.log(`[NodeLLM] ${message}`);
22
+ }
23
+ }
24
+ export const logger = new Logger();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-llm/core",
3
- "version": "0.8.0",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -10,7 +10,7 @@
10
10
  "default": "./dist/index.js"
11
11
  }
12
12
  },
13
- "description": "A provider-agnostic LLM core for Node.js, inspired by ruby-llm.",
13
+ "description": "A provider-agnostic NodeLLM core for Node.js, inspired by ruby-llm.",
14
14
  "author": "node-llm contributors",
15
15
  "license": "MIT",
16
16
  "engines": {
@@ -1,21 +0,0 @@
1
- import { Message } from "./Message.js";
2
- import { ChatOptions } from "./ChatOptions.js";
3
- import { Provider } from "../providers/Provider.js";
4
- export declare class Stream {
5
- private readonly provider;
6
- private readonly model;
7
- private readonly options;
8
- private messages;
9
- constructor(provider: Provider, model: string, options?: ChatOptions, messages?: Message[]);
10
- /**
11
- * Read-only access to message history
12
- */
13
- get history(): readonly Message[];
14
- /**
15
- * Streams the model's response to a user question.
16
- * @param content The user's question to send to the model.
17
- * @returns An async generator yielding chunks of the assistant's response as strings.
18
- */
19
- stream(content: string): AsyncGenerator<import("../providers/Provider.js").ChatChunk, void, unknown>;
20
- }
21
- //# sourceMappingURL=Stream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Stream.d.ts","sourceRoot":"","sources":["../../src/chat/Stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,qBAAa,MAAM;IAIf,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAY;gBAGT,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,EAC1C,QAAQ,CAAC,EAAE,OAAO,EAAE;IAmBtB;;OAEG;IACH,IAAI,OAAO,IAAI,SAAS,OAAO,EAAE,CAEhC;IAED;;;;OAIG;IACI,MAAM,CAAC,OAAO,EAAE,MAAM;CA+C9B"}
@@ -1,73 +0,0 @@
1
- import { ChatResponseString } from "./ChatResponse.js";
2
- export class Stream {
3
- provider;
4
- model;
5
- options;
6
- messages;
7
- constructor(provider, model, options = {}, messages) {
8
- this.provider = provider;
9
- this.model = model;
10
- this.options = options;
11
- this.messages = messages ?? [];
12
- // Only initialize if we're starting a new history
13
- if (this.messages.length === 0) {
14
- if (options.systemPrompt) {
15
- this.messages.push({
16
- role: "system",
17
- content: options.systemPrompt,
18
- });
19
- }
20
- if (options.messages) {
21
- this.messages.push(...options.messages);
22
- }
23
- }
24
- }
25
- /**
26
- * Read-only access to message history
27
- */
28
- get history() {
29
- return this.messages;
30
- }
31
- /**
32
- * Streams the model's response to a user question.
33
- * @param content The user's question to send to the model.
34
- * @returns An async generator yielding chunks of the assistant's response as strings.
35
- */
36
- async *stream(content) {
37
- this.messages.push({ role: "user", content });
38
- if (!this.provider.stream) {
39
- throw new Error("Streaming not supported by provider");
40
- }
41
- let full = "";
42
- let fullReasoning = "";
43
- let isFirst = true;
44
- for await (const chunk of this.provider.stream({
45
- model: this.model,
46
- messages: this.messages,
47
- temperature: this.options.temperature,
48
- max_tokens: this.options.maxTokens,
49
- })) {
50
- if (isFirst) {
51
- if (this.options.onNewMessage)
52
- this.options.onNewMessage();
53
- isFirst = false;
54
- }
55
- if (chunk.content) {
56
- full += chunk.content;
57
- }
58
- if (chunk.reasoning) {
59
- fullReasoning += chunk.reasoning;
60
- }
61
- yield chunk;
62
- }
63
- this.messages.push({
64
- role: "assistant",
65
- content: full,
66
- // @ts-ignore
67
- reasoning: fullReasoning || undefined
68
- });
69
- if (this.options.onEndMessage) {
70
- this.options.onEndMessage(new ChatResponseString(full, { input_tokens: 0, output_tokens: 0, total_tokens: 0 }, this.model, fullReasoning || undefined));
71
- }
72
- }
73
- }
@@ -1,20 +0,0 @@
1
- export interface EmbeddingRequest {
2
- input: string | string[];
3
- model?: string;
4
- dimensions?: number;
5
- user?: string;
6
- }
7
- export interface EmbeddingVector {
8
- embedding: number[];
9
- index: number;
10
- }
11
- export interface EmbeddingResponse {
12
- vectors: number[][];
13
- model: string;
14
- input_tokens: number;
15
- dimensions: number;
16
- }
17
- export interface EmbeddingProvider {
18
- embed(request: EmbeddingRequest): Promise<EmbeddingResponse>;
19
- }
20
- //# sourceMappingURL=Embedding.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Embedding.d.ts","sourceRoot":"","sources":["../../src/providers/Embedding.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9D"}
@@ -1 +0,0 @@
1
- export {};