@node-llm/core 0.4.0 → 0.5.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 (53) hide show
  1. package/README.md +43 -20
  2. package/dist/chat/Chat.d.ts +1 -1
  3. package/dist/chat/Chat.d.ts.map +1 -1
  4. package/dist/chat/Chat.js +2 -1
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -0
  8. package/dist/llm.d.ts.map +1 -1
  9. package/dist/llm.js +4 -0
  10. package/dist/providers/Provider.d.ts +1 -0
  11. package/dist/providers/Provider.d.ts.map +1 -1
  12. package/dist/providers/anthropic/AnthropicProvider.d.ts +32 -0
  13. package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -0
  14. package/dist/providers/anthropic/AnthropicProvider.js +51 -0
  15. package/dist/providers/anthropic/Capabilities.d.ts +47 -0
  16. package/dist/providers/anthropic/Capabilities.d.ts.map +1 -0
  17. package/dist/providers/anthropic/Capabilities.js +153 -0
  18. package/dist/providers/anthropic/Chat.d.ts +8 -0
  19. package/dist/providers/anthropic/Chat.d.ts.map +1 -0
  20. package/dist/providers/anthropic/Chat.js +93 -0
  21. package/dist/providers/anthropic/Errors.d.ts +2 -0
  22. package/dist/providers/anthropic/Errors.d.ts.map +1 -0
  23. package/dist/providers/anthropic/Errors.js +33 -0
  24. package/dist/providers/anthropic/Models.d.ts +8 -0
  25. package/dist/providers/anthropic/Models.d.ts.map +1 -0
  26. package/dist/providers/anthropic/Models.js +63 -0
  27. package/dist/providers/anthropic/Streaming.d.ts +8 -0
  28. package/dist/providers/anthropic/Streaming.d.ts.map +1 -0
  29. package/dist/providers/anthropic/Streaming.js +104 -0
  30. package/dist/providers/anthropic/Utils.d.ts +5 -0
  31. package/dist/providers/anthropic/Utils.d.ts.map +1 -0
  32. package/dist/providers/anthropic/Utils.js +125 -0
  33. package/dist/providers/anthropic/index.d.ts +2 -0
  34. package/dist/providers/anthropic/index.d.ts.map +1 -0
  35. package/dist/providers/anthropic/index.js +11 -0
  36. package/dist/providers/anthropic/types.d.ts +57 -0
  37. package/dist/providers/anthropic/types.d.ts.map +1 -0
  38. package/dist/providers/anthropic/types.js +1 -0
  39. package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
  40. package/dist/providers/gemini/Capabilities.js +5 -2
  41. package/dist/providers/gemini/Chat.d.ts +1 -0
  42. package/dist/providers/gemini/Chat.d.ts.map +1 -1
  43. package/dist/providers/gemini/Chat.js +43 -4
  44. package/dist/providers/gemini/GeminiProvider.d.ts +2 -1
  45. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
  46. package/dist/providers/gemini/GeminiProvider.js +3 -0
  47. package/dist/providers/gemini/Streaming.d.ts +1 -0
  48. package/dist/providers/gemini/Streaming.d.ts.map +1 -1
  49. package/dist/providers/gemini/Streaming.js +34 -4
  50. package/dist/providers/registry.js +1 -1
  51. package/dist/utils/FileLoader.d.ts.map +1 -1
  52. package/dist/utils/FileLoader.js +1 -0
  53. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { Provider, ChatRequest, ChatResponse, ModelInfo, ChatChunk, ImageRequest, ImageResponse, TranscriptionRequest, TranscriptionResponse } from "../Provider.js";
1
+ import { Provider, ChatRequest, ChatResponse, ModelInfo, ChatChunk, ImageRequest, ImageResponse, TranscriptionRequest, TranscriptionResponse, ModerationRequest, ModerationResponse } from "../Provider.js";
2
2
  import { EmbeddingRequest, EmbeddingResponse } from "../Embedding.js";
3
3
  export interface GeminiProviderOptions {
4
4
  apiKey: string;
@@ -30,5 +30,6 @@ export declare class GeminiProvider implements Provider {
30
30
  paint(request: ImageRequest): Promise<ImageResponse>;
31
31
  embed(request: EmbeddingRequest): Promise<EmbeddingResponse>;
32
32
  transcribe(request: TranscriptionRequest): Promise<TranscriptionResponse>;
33
+ moderate(_request: ModerationRequest): Promise<ModerationResponse>;
33
34
  }
34
35
  //# sourceMappingURL=GeminiProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/GeminiProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAQrK,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,YAAW,QAAQ;IAoBjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBpC,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;kCACR,MAAM;MAChC;gBAE2B,OAAO,EAAE,qBAAqB;IAUrD,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;CAGhF"}
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,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,YAAW,QAAQ;IAoBjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBpC,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;kCACR,MAAM;MAChC;gBAE2B,OAAO,EAAE,qBAAqB;IAUrD,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;IAIzE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGzE"}
@@ -52,4 +52,7 @@ export class GeminiProvider {
52
52
  async transcribe(request) {
53
53
  return this.transcriptionHandler.execute(request);
54
54
  }
55
+ async moderate(_request) {
56
+ throw new Error("Gemini doesn't support moderation");
57
+ }
55
58
  }
@@ -4,5 +4,6 @@ export declare class GeminiStreaming {
4
4
  private readonly apiKey;
5
5
  constructor(baseUrl: string, apiKey: string);
6
6
  execute(request: ChatRequest): AsyncGenerator<ChatChunk>;
7
+ private sanitizeSchema;
7
8
  }
8
9
  //# sourceMappingURL=Streaming.d.ts.map
@@ -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;AAMxD,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAxC,OAAO,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM;IAEtE,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;CAoEhE"}
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;AAMxD,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAxC,OAAO,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM;IAEtE,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAgF/D,OAAO,CAAC,cAAc;CAwBvB"}
@@ -12,12 +12,22 @@ export class GeminiStreaming {
12
12
  const temperature = Capabilities.normalizeTemperature(request.temperature, request.model);
13
13
  const url = `${this.baseUrl}/models/${request.model}:streamGenerateContent?alt=sse&key=${this.apiKey}`;
14
14
  const { contents, systemInstructionParts } = await GeminiChatUtils.convertMessages(request.messages);
15
+ const generationConfig = {
16
+ temperature: temperature ?? undefined,
17
+ maxOutputTokens: request.max_tokens,
18
+ };
19
+ if (request.response_format?.type === "json_object") {
20
+ generationConfig.responseMimeType = "application/json";
21
+ }
22
+ else if (request.response_format?.type === "json_schema") {
23
+ generationConfig.responseMimeType = "application/json";
24
+ if (request.response_format.json_schema?.schema) {
25
+ generationConfig.responseSchema = this.sanitizeSchema(request.response_format.json_schema.schema);
26
+ }
27
+ }
15
28
  const payload = {
16
29
  contents,
17
- generationConfig: {
18
- temperature: temperature ?? undefined,
19
- maxOutputTokens: request.max_tokens,
20
- },
30
+ generationConfig,
21
31
  };
22
32
  if (systemInstructionParts.length > 0) {
23
33
  payload.systemInstruction = { parts: systemInstructionParts };
@@ -67,4 +77,24 @@ export class GeminiStreaming {
67
77
  }
68
78
  }
69
79
  }
80
+ sanitizeSchema(schema) {
81
+ if (typeof schema !== "object" || schema === null)
82
+ return schema;
83
+ const sanitized = { ...schema };
84
+ // Remove unsupported fields
85
+ delete sanitized.additionalProperties;
86
+ delete sanitized.$schema;
87
+ delete sanitized.$id;
88
+ delete sanitized.definitions;
89
+ // Recursively sanitize
90
+ if (sanitized.properties) {
91
+ for (const key in sanitized.properties) {
92
+ sanitized.properties[key] = this.sanitizeSchema(sanitized.properties[key]);
93
+ }
94
+ }
95
+ if (sanitized.items) {
96
+ sanitized.items = this.sanitizeSchema(sanitized.items);
97
+ }
98
+ return sanitized;
99
+ }
70
100
  }
@@ -5,7 +5,7 @@ class ProviderRegistry {
5
5
  */
6
6
  register(name, factory) {
7
7
  if (this.providers.has(name)) {
8
- throw new Error(`Provider '${name}' is already registered`);
8
+ return;
9
9
  }
10
10
  this.providers.set(name, factory);
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FileLoader.d.ts","sourceRoot":"","sources":["../../src/utils/FileLoader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA0CjD,qBAAa,UAAU;WACR,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA+C1D"}
1
+ {"version":3,"file":"FileLoader.d.ts","sourceRoot":"","sources":["../../src/utils/FileLoader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA2CjD,qBAAa,UAAU;WACR,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA+C1D"}
@@ -33,6 +33,7 @@ const MIME_TYPES = {
33
33
  ".rs": "text/x-rust",
34
34
  ".swift": "text/x-swift",
35
35
  ".kt": "text/x-kotlin",
36
+ ".pdf": "application/pdf",
36
37
  };
37
38
  const TEXT_EXTENSIONS = new Set([
38
39
  ".json", ".js", ".mjs", ".cjs", ".ts", ".rb", ".py", ".txt", ".md", ".html", ".css", ".xml", ".yml", ".yaml", ".env",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-llm/core",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",