@jaypie/llm 1.3.0 → 1.3.2

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 (87) hide show
  1. package/README.md +9 -0
  2. package/dist/cjs/constants.d.ts +82 -30
  3. package/dist/cjs/index.cjs +3081 -578
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/cjs/index.d.cts +661 -0
  6. package/dist/cjs/index.d.ts +5 -1
  7. package/dist/cjs/observability/llmobs.d.ts +72 -0
  8. package/dist/cjs/operate/OperateLoop.d.ts +7 -0
  9. package/dist/cjs/operate/StreamLoop.d.ts +3 -0
  10. package/dist/cjs/operate/adapters/AnthropicAdapter.d.ts +36 -5
  11. package/dist/cjs/operate/adapters/BedrockAdapter.d.ts +78 -0
  12. package/dist/cjs/operate/adapters/{GeminiAdapter.d.ts → GoogleAdapter.d.ts} +19 -9
  13. package/dist/cjs/operate/adapters/OpenAiAdapter.d.ts +13 -3
  14. package/dist/cjs/operate/adapters/OpenRouterAdapter.d.ts +55 -8
  15. package/dist/cjs/operate/adapters/ProviderAdapter.interface.d.ts +5 -3
  16. package/dist/cjs/operate/adapters/XaiAdapter.d.ts +14 -0
  17. package/dist/cjs/operate/adapters/index.d.ts +3 -1
  18. package/dist/cjs/operate/index.d.ts +1 -1
  19. package/dist/cjs/operate/retry/RetryExecutor.d.ts +6 -3
  20. package/dist/cjs/operate/retry/createStaleRejectionGuard.d.ts +19 -0
  21. package/dist/cjs/operate/retry/index.d.ts +1 -0
  22. package/dist/cjs/operate/retry/isTransientNetworkError.d.ts +18 -0
  23. package/dist/cjs/operate/types.d.ts +2 -0
  24. package/dist/cjs/providers/anthropic/utils.d.ts +2 -1
  25. package/dist/cjs/providers/bedrock/BedrockProvider.class.d.ts +21 -0
  26. package/dist/cjs/providers/bedrock/index.d.ts +1 -0
  27. package/dist/cjs/providers/bedrock/utils.d.ts +7 -0
  28. package/dist/cjs/providers/{gemini/GeminiProvider.class.d.ts → google/GoogleProvider.class.d.ts} +1 -1
  29. package/dist/cjs/providers/google/index.d.ts +3 -0
  30. package/dist/{esm/providers/gemini → cjs/providers/google}/types.d.ts +1 -0
  31. package/dist/cjs/providers/{gemini → google}/utils.d.ts +2 -1
  32. package/dist/cjs/providers/openai/utils.d.ts +2 -1
  33. package/dist/cjs/providers/openrouter/utils.d.ts +2 -1
  34. package/dist/{esm/providers/gemini/GeminiProvider.class.d.ts → cjs/providers/xai/XaiProvider.class.d.ts} +1 -1
  35. package/dist/cjs/providers/xai/index.d.ts +1 -0
  36. package/dist/cjs/providers/xai/utils.d.ts +6 -0
  37. package/dist/cjs/types/LlmProvider.interface.d.ts +1 -1
  38. package/dist/cjs/types/LlmStreamChunk.interface.d.ts +2 -0
  39. package/dist/cjs/util/fillFormatArrays.d.ts +17 -0
  40. package/dist/cjs/util/index.d.ts +2 -0
  41. package/dist/cjs/util/jsonSchemaToOpenApi3.d.ts +10 -0
  42. package/dist/cjs/util/logger.d.ts +2 -2
  43. package/dist/cjs/util/maxTurnsFromOptions.d.ts +1 -1
  44. package/dist/esm/constants.d.ts +82 -30
  45. package/dist/esm/index.d.ts +661 -12
  46. package/dist/esm/index.js +3077 -578
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/observability/llmobs.d.ts +72 -0
  49. package/dist/esm/operate/OperateLoop.d.ts +7 -0
  50. package/dist/esm/operate/StreamLoop.d.ts +3 -0
  51. package/dist/esm/operate/adapters/AnthropicAdapter.d.ts +36 -5
  52. package/dist/esm/operate/adapters/BedrockAdapter.d.ts +78 -0
  53. package/dist/esm/operate/adapters/{GeminiAdapter.d.ts → GoogleAdapter.d.ts} +19 -9
  54. package/dist/esm/operate/adapters/OpenAiAdapter.d.ts +13 -3
  55. package/dist/esm/operate/adapters/OpenRouterAdapter.d.ts +55 -8
  56. package/dist/esm/operate/adapters/ProviderAdapter.interface.d.ts +5 -3
  57. package/dist/esm/operate/adapters/XaiAdapter.d.ts +14 -0
  58. package/dist/esm/operate/adapters/index.d.ts +3 -1
  59. package/dist/esm/operate/index.d.ts +1 -1
  60. package/dist/esm/operate/retry/RetryExecutor.d.ts +6 -3
  61. package/dist/esm/operate/retry/createStaleRejectionGuard.d.ts +19 -0
  62. package/dist/esm/operate/retry/index.d.ts +1 -0
  63. package/dist/esm/operate/retry/isTransientNetworkError.d.ts +18 -0
  64. package/dist/esm/operate/types.d.ts +2 -0
  65. package/dist/esm/providers/anthropic/utils.d.ts +2 -1
  66. package/dist/esm/providers/bedrock/BedrockProvider.class.d.ts +21 -0
  67. package/dist/esm/providers/bedrock/index.d.ts +1 -0
  68. package/dist/esm/providers/bedrock/utils.d.ts +7 -0
  69. package/dist/esm/providers/google/GoogleProvider.class.d.ts +21 -0
  70. package/dist/esm/providers/google/index.d.ts +3 -0
  71. package/dist/{cjs/providers/gemini → esm/providers/google}/types.d.ts +1 -0
  72. package/dist/esm/providers/{gemini → google}/utils.d.ts +2 -1
  73. package/dist/esm/providers/openai/utils.d.ts +2 -1
  74. package/dist/esm/providers/openrouter/utils.d.ts +2 -1
  75. package/dist/esm/providers/xai/XaiProvider.class.d.ts +21 -0
  76. package/dist/esm/providers/xai/index.d.ts +1 -0
  77. package/dist/esm/providers/xai/utils.d.ts +6 -0
  78. package/dist/esm/types/LlmProvider.interface.d.ts +1 -1
  79. package/dist/esm/types/LlmStreamChunk.interface.d.ts +2 -0
  80. package/dist/esm/util/fillFormatArrays.d.ts +17 -0
  81. package/dist/esm/util/index.d.ts +2 -0
  82. package/dist/esm/util/jsonSchemaToOpenApi3.d.ts +10 -0
  83. package/dist/esm/util/logger.d.ts +2 -2
  84. package/dist/esm/util/maxTurnsFromOptions.d.ts +1 -1
  85. package/package.json +18 -5
  86. package/dist/cjs/providers/gemini/index.d.ts +0 -3
  87. package/dist/esm/providers/gemini/index.d.ts +0 -3
@@ -72,6 +72,7 @@ export interface GeminiGenerateContentConfig {
72
72
  };
73
73
  responseMimeType?: string;
74
74
  responseJsonSchema?: JsonObject;
75
+ responseSchema?: JsonObject;
75
76
  temperature?: number;
76
77
  topP?: number;
77
78
  topK?: number;
@@ -1,7 +1,8 @@
1
+ import { createLogger } from "@jaypie/logger";
1
2
  import type { GoogleGenAI } from "@google/genai";
2
3
  import { LlmMessageOptions } from "../../types/LlmProvider.interface.js";
3
4
  export declare function loadSdk(): Promise<typeof import("@google/genai")>;
4
- export declare const getLogger: () => any;
5
+ export declare const getLogger: () => ReturnType<typeof createLogger>;
5
6
  export declare function initializeClient({ apiKey, }?: {
6
7
  apiKey?: string;
7
8
  }): Promise<GoogleGenAI>;
@@ -1,8 +1,9 @@
1
+ import { createLogger } from "@jaypie/logger";
1
2
  import { JsonObject, NaturalSchema } from "@jaypie/types";
2
3
  import { OpenAI } from "openai";
3
4
  import { z } from "zod/v4";
4
5
  import { LlmMessageOptions } from "../../types/LlmProvider.interface.js";
5
- export declare const getLogger: () => any;
6
+ export declare const getLogger: () => ReturnType<typeof createLogger>;
6
7
  export declare function initializeClient({ apiKey, }?: {
7
8
  apiKey?: string;
8
9
  }): Promise<OpenAI>;
@@ -1,7 +1,8 @@
1
+ import { createLogger } from "@jaypie/logger";
1
2
  import type { OpenRouter } from "@openrouter/sdk";
2
3
  import { LlmMessageOptions } from "../../types/LlmProvider.interface.js";
3
4
  export declare function loadSdk(): Promise<typeof import("@openrouter/sdk")>;
4
- export declare const getLogger: () => any;
5
+ export declare const getLogger: () => ReturnType<typeof createLogger>;
5
6
  export declare function initializeClient({ apiKey, }?: {
6
7
  apiKey?: string;
7
8
  }): Promise<OpenRouter>;
@@ -0,0 +1,21 @@
1
+ import { JsonObject } from "@jaypie/types";
2
+ import { LlmHistory, LlmInputMessage, LlmMessageOptions, LlmOperateOptions, LlmOperateResponse, LlmProvider } from "../../types/LlmProvider.interface.js";
3
+ import { LlmStreamChunk } from "../../types/LlmStreamChunk.interface.js";
4
+ export declare class XaiProvider implements LlmProvider {
5
+ private model;
6
+ private _client?;
7
+ private _operateLoop?;
8
+ private _streamLoop?;
9
+ private apiKey?;
10
+ private log;
11
+ private conversationHistory;
12
+ constructor(model?: string, { apiKey }?: {
13
+ apiKey?: string;
14
+ });
15
+ private getClient;
16
+ private getOperateLoop;
17
+ private getStreamLoop;
18
+ send(message: string, options?: LlmMessageOptions): Promise<string | JsonObject>;
19
+ operate(input: string | LlmHistory | LlmInputMessage, options?: LlmOperateOptions): Promise<LlmOperateResponse>;
20
+ stream(input: string | LlmHistory | LlmInputMessage, options?: LlmOperateOptions): AsyncIterable<LlmStreamChunk>;
21
+ }
@@ -0,0 +1 @@
1
+ export { XaiProvider } from "./XaiProvider.class.js";
@@ -0,0 +1,6 @@
1
+ import { createLogger } from "@jaypie/logger";
2
+ import { OpenAI } from "openai";
3
+ export declare const getLogger: () => ReturnType<typeof createLogger>;
4
+ export declare function initializeClient({ apiKey, }?: {
5
+ apiKey?: string;
6
+ }): Promise<OpenAI>;
@@ -149,7 +149,7 @@ export type LlmHistory = LlmHistoryItem[];
149
149
  * Used when the primary provider fails with an unrecoverable error.
150
150
  */
151
151
  export interface LlmFallbackConfig {
152
- /** Provider name (e.g., "openai", "anthropic", "gemini") */
152
+ /** Provider name (e.g., "openai", "anthropic", "google") */
153
153
  provider: string;
154
154
  /** Model to use with this provider (optional, uses provider default if not specified) */
155
155
  model?: string;
@@ -16,6 +16,8 @@ export interface LlmStreamChunkToolCall {
16
16
  id: string;
17
17
  name: string;
18
18
  arguments: string;
19
+ /** Provider-specific metadata preserved through tool-call roundtrip */
20
+ metadata?: Record<string, unknown>;
19
21
  };
20
22
  }
21
23
  export interface LlmStreamChunkToolResult {
@@ -0,0 +1,17 @@
1
+ import { z } from "zod/v4";
2
+ import { JsonObject, NaturalSchema } from "@jaypie/types";
3
+ type Format = JsonObject | NaturalSchema | z.ZodType;
4
+ /**
5
+ * Ensure every array field declared in `format` is present in `content` as an
6
+ * array. A declared `format` is a schema contract: an empty list should surface
7
+ * as `[]`, not be dropped from the response. Some providers/models omit empty
8
+ * array fields entirely, leaving consumers to read `.length` on `undefined`.
9
+ *
10
+ * Only mutates a (cloned) structured object; strings and non-objects pass
11
+ * through untouched.
12
+ */
13
+ export declare function fillFormatArrays({ content, format, }: {
14
+ content: JsonObject;
15
+ format: Format;
16
+ }): JsonObject;
17
+ export {};
@@ -1,7 +1,9 @@
1
1
  export * from "./determineModelProvider.js";
2
2
  export * from "./extractReasoning.js";
3
+ export * from "./fillFormatArrays.js";
3
4
  export * from "./formatOperateInput.js";
4
5
  export * from "./formatOperateMessage.js";
6
+ export * from "./jsonSchemaToOpenApi3.js";
5
7
  export * from "./logger.js";
6
8
  export * from "./maxTurnsFromOptions.js";
7
9
  export * from "./naturalZodSchema.js";
@@ -0,0 +1,10 @@
1
+ import { JsonObject } from "@jaypie/types";
2
+ /**
3
+ * Converts a JSON Schema (Draft 2020-12) object to the OpenAPI 3.0 schema subset
4
+ * that Gemini's `responseSchema` accepts. This constrains generation (not just validation)
5
+ * and avoids the `items`-keyword leakage bug in `responseJsonSchema`.
6
+ *
7
+ * Strips: $schema, additionalProperties, $defs, $ref (inlines where possible), const
8
+ * Preserves: type, properties, required, items, enum, description, nullable
9
+ */
10
+ export declare function jsonSchemaToOpenApi3(schema: JsonObject): JsonObject;
@@ -1,2 +1,2 @@
1
- export declare const getLogger: () => any;
2
- export declare const log: any;
1
+ import { createLogger } from "@jaypie/logger";
2
+ export declare const getLogger: () => ReturnType<typeof createLogger>;
@@ -1,6 +1,6 @@
1
1
  import { LlmOperateOptions } from "../types/LlmProvider.interface.js";
2
2
  export declare const MAX_TURNS_ABSOLUTE_LIMIT = 72;
3
- export declare const MAX_TURNS_DEFAULT_LIMIT = 12;
3
+ export declare const MAX_TURNS_DEFAULT_LIMIT = 24;
4
4
  /**
5
5
  * Determines the maximum number of turns based on the provided options
6
6
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/llm",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Large language model utilities",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,9 +12,14 @@
12
12
  "type": "module",
13
13
  "exports": {
14
14
  ".": {
15
- "types": "./dist/esm/index.d.ts",
16
- "import": "./dist/esm/index.js",
17
- "require": "./dist/cjs/index.cjs"
15
+ "import": {
16
+ "types": "./dist/esm/index.d.ts",
17
+ "default": "./dist/esm/index.js"
18
+ },
19
+ "require": {
20
+ "types": "./dist/cjs/index.d.cts",
21
+ "default": "./dist/cjs/index.cjs"
22
+ }
18
23
  }
19
24
  },
20
25
  "main": "./dist/cjs/index.cjs",
@@ -28,6 +33,8 @@
28
33
  "format": "eslint . --fix",
29
34
  "lint": "eslint .",
30
35
  "test": "vitest run .",
36
+ "test:matrix": "tsx test/matrix.ts",
37
+ "test:matrix:bedrock": "APP_MODELS=\"us.anthropic.claude-opus-4-7,us.anthropic.claude-sonnet-4-6,us.anthropic.claude-haiku-4-5-20251001-v1:0,amazon.nova-pro-v1:0,us.amazon.nova-2-lite-v1:0,amazon.nova-micro-v1:0,deepseek.v3.2,google.gemma-3-27b-it,moonshotai.kimi-k2.5,openai.gpt-oss-120b-1:0\" tsx test/matrix.ts",
31
38
  "test:watch": "vitest",
32
39
  "typecheck": "tsc --noEmit"
33
40
  },
@@ -43,12 +50,15 @@
43
50
  },
44
51
  "devDependencies": {
45
52
  "@anthropic-ai/sdk": "^0.71.0",
53
+ "@aws-sdk/client-bedrock-runtime": "^3.1045.0",
46
54
  "@google/genai": "^1.30.0",
47
55
  "@jaypie/types": "*",
48
- "@openrouter/sdk": "^0.1.27"
56
+ "@openrouter/sdk": "^0.1.27",
57
+ "rollup-plugin-dts": "^6.1.1"
49
58
  },
50
59
  "peerDependencies": {
51
60
  "@anthropic-ai/sdk": "^0.71.0",
61
+ "@aws-sdk/client-bedrock-runtime": "^3.1045.0",
52
62
  "@google/genai": "^1.30.0",
53
63
  "@jaypie/kit": "*",
54
64
  "@jaypie/logger": "*",
@@ -58,6 +68,9 @@
58
68
  "@anthropic-ai/sdk": {
59
69
  "optional": true
60
70
  },
71
+ "@aws-sdk/client-bedrock-runtime": {
72
+ "optional": true
73
+ },
61
74
  "@google/genai": {
62
75
  "optional": true
63
76
  },
@@ -1,3 +0,0 @@
1
- export { GeminiProvider } from "./GeminiProvider.class.js";
2
- export * from "./types.js";
3
- export * from "./utils.js";
@@ -1,3 +0,0 @@
1
- export { GeminiProvider } from "./GeminiProvider.class.js";
2
- export * from "./types.js";
3
- export * from "./utils.js";