@jaypie/llm 1.3.4 → 1.3.6

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 (177) hide show
  1. package/dist/cjs/index.cjs +235 -36
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +14 -2
  4. package/dist/cjs/{constants.d.ts → src/constants.d.ts} +1 -1
  5. package/dist/cjs/{index.d.ts → src/index.d.ts} +1 -0
  6. package/dist/cjs/{operate → src/operate}/types.d.ts +2 -0
  7. package/dist/cjs/{util → src/util}/index.d.ts +2 -0
  8. package/dist/cjs/src/util/jsonSchema.d.ts +17 -0
  9. package/dist/cjs/src/util/maxOutputTokens.d.ts +12 -0
  10. package/dist/esm/index.d.ts +14 -2
  11. package/dist/esm/index.js +260 -63
  12. package/dist/esm/index.js.map +1 -1
  13. package/dist/esm/{constants.d.ts → src/constants.d.ts} +1 -1
  14. package/dist/esm/src/index.d.ts +17 -0
  15. package/dist/esm/{operate → src/operate}/types.d.ts +2 -0
  16. package/dist/esm/{util → src/util}/index.d.ts +2 -0
  17. package/dist/esm/src/util/jsonSchema.d.ts +17 -0
  18. package/dist/esm/src/util/maxOutputTokens.d.ts +12 -0
  19. package/package.json +3 -2
  20. /package/dist/cjs/{Llm.d.ts → src/Llm.d.ts} +0 -0
  21. /package/dist/cjs/{observability → src/observability}/llmobs.d.ts +0 -0
  22. /package/dist/cjs/{operate → src/operate}/OperateLoop.d.ts +0 -0
  23. /package/dist/cjs/{operate → src/operate}/StreamLoop.d.ts +0 -0
  24. /package/dist/cjs/{operate → src/operate}/adapters/AnthropicAdapter.d.ts +0 -0
  25. /package/dist/cjs/{operate → src/operate}/adapters/BedrockAdapter.d.ts +0 -0
  26. /package/dist/cjs/{operate → src/operate}/adapters/GoogleAdapter.d.ts +0 -0
  27. /package/dist/cjs/{operate → src/operate}/adapters/OpenAiAdapter.d.ts +0 -0
  28. /package/dist/cjs/{operate → src/operate}/adapters/OpenRouterAdapter.d.ts +0 -0
  29. /package/dist/cjs/{operate → src/operate}/adapters/ProviderAdapter.interface.d.ts +0 -0
  30. /package/dist/cjs/{operate → src/operate}/adapters/XaiAdapter.d.ts +0 -0
  31. /package/dist/cjs/{operate → src/operate}/adapters/index.d.ts +0 -0
  32. /package/dist/cjs/{operate → src/operate}/hooks/HookRunner.d.ts +0 -0
  33. /package/dist/cjs/{operate → src/operate}/hooks/index.d.ts +0 -0
  34. /package/dist/cjs/{operate → src/operate}/index.d.ts +0 -0
  35. /package/dist/cjs/{operate → src/operate}/input/InputProcessor.d.ts +0 -0
  36. /package/dist/cjs/{operate → src/operate}/input/index.d.ts +0 -0
  37. /package/dist/cjs/{operate → src/operate}/response/ResponseBuilder.d.ts +0 -0
  38. /package/dist/cjs/{operate → src/operate}/response/index.d.ts +0 -0
  39. /package/dist/cjs/{operate → src/operate}/retry/RetryExecutor.d.ts +0 -0
  40. /package/dist/cjs/{operate → src/operate}/retry/RetryPolicy.d.ts +0 -0
  41. /package/dist/cjs/{operate → src/operate}/retry/createStaleRejectionGuard.d.ts +0 -0
  42. /package/dist/cjs/{operate → src/operate}/retry/index.d.ts +0 -0
  43. /package/dist/cjs/{operate → src/operate}/retry/isTransientNetworkError.d.ts +0 -0
  44. /package/dist/cjs/{providers → src/providers}/anthropic/AnthropicProvider.class.d.ts +0 -0
  45. /package/dist/cjs/{providers → src/providers}/anthropic/client.d.ts +0 -0
  46. /package/dist/cjs/{providers → src/providers}/anthropic/index.d.ts +0 -0
  47. /package/dist/cjs/{providers → src/providers}/anthropic/types.d.ts +0 -0
  48. /package/dist/cjs/{providers → src/providers}/anthropic/utils.d.ts +0 -0
  49. /package/dist/cjs/{providers → src/providers}/bedrock/BedrockProvider.class.d.ts +0 -0
  50. /package/dist/cjs/{providers → src/providers}/bedrock/index.d.ts +0 -0
  51. /package/dist/cjs/{providers → src/providers}/bedrock/utils.d.ts +0 -0
  52. /package/dist/cjs/{providers → src/providers}/google/GoogleProvider.class.d.ts +0 -0
  53. /package/dist/cjs/{providers → src/providers}/google/client.d.ts +0 -0
  54. /package/dist/cjs/{providers → src/providers}/google/index.d.ts +0 -0
  55. /package/dist/cjs/{providers → src/providers}/google/types.d.ts +0 -0
  56. /package/dist/cjs/{providers → src/providers}/google/utils.d.ts +0 -0
  57. /package/dist/cjs/{providers → src/providers}/openai/OpenAiProvider.class.d.ts +0 -0
  58. /package/dist/cjs/{providers → src/providers}/openai/client.d.ts +0 -0
  59. /package/dist/cjs/{providers → src/providers}/openai/index.d.ts +0 -0
  60. /package/dist/cjs/{providers → src/providers}/openai/responseFormat.d.ts +0 -0
  61. /package/dist/cjs/{providers → src/providers}/openai/types.d.ts +0 -0
  62. /package/dist/cjs/{providers → src/providers}/openai/utils.d.ts +0 -0
  63. /package/dist/cjs/{providers → src/providers}/openrouter/OpenRouterProvider.class.d.ts +0 -0
  64. /package/dist/cjs/{providers → src/providers}/openrouter/client.d.ts +0 -0
  65. /package/dist/cjs/{providers → src/providers}/openrouter/index.d.ts +0 -0
  66. /package/dist/cjs/{providers → src/providers}/openrouter/utils.d.ts +0 -0
  67. /package/dist/cjs/{providers → src/providers}/xai/XaiProvider.class.d.ts +0 -0
  68. /package/dist/cjs/{providers → src/providers}/xai/index.d.ts +0 -0
  69. /package/dist/cjs/{providers → src/providers}/xai/utils.d.ts +0 -0
  70. /package/dist/cjs/{tools → src/tools}/Toolkit.class.d.ts +0 -0
  71. /package/dist/cjs/{tools → src/tools}/index.d.ts +0 -0
  72. /package/dist/cjs/{tools → src/tools}/random.d.ts +0 -0
  73. /package/dist/cjs/{tools → src/tools}/roll.d.ts +0 -0
  74. /package/dist/cjs/{tools → src/tools}/time.d.ts +0 -0
  75. /package/dist/cjs/{tools → src/tools}/weather.d.ts +0 -0
  76. /package/dist/cjs/{types → src/types}/LlmOperateInput.guards.d.ts +0 -0
  77. /package/dist/cjs/{types → src/types}/LlmProvider.interface.d.ts +0 -0
  78. /package/dist/cjs/{types → src/types}/LlmStreamChunk.interface.d.ts +0 -0
  79. /package/dist/cjs/{types → src/types}/LlmTool.interface.d.ts +0 -0
  80. /package/dist/cjs/{upload → src/upload}/detectMimeType.d.ts +0 -0
  81. /package/dist/cjs/{upload → src/upload}/extractPdfPages.d.ts +0 -0
  82. /package/dist/cjs/{upload → src/upload}/index.d.ts +0 -0
  83. /package/dist/cjs/{upload → src/upload}/loadLocalFile.d.ts +0 -0
  84. /package/dist/cjs/{upload → src/upload}/loadS3File.d.ts +0 -0
  85. /package/dist/cjs/{upload → src/upload}/resolveOperateInput.d.ts +0 -0
  86. /package/dist/cjs/{util → src/util}/determineModelProvider.d.ts +0 -0
  87. /package/dist/cjs/{util → src/util}/extractReasoning.d.ts +0 -0
  88. /package/dist/cjs/{util → src/util}/fillFormatArrays.d.ts +0 -0
  89. /package/dist/cjs/{util → src/util}/formatOperateInput.d.ts +0 -0
  90. /package/dist/cjs/{util → src/util}/formatOperateMessage.d.ts +0 -0
  91. /package/dist/cjs/{util → src/util}/jsonSchemaToOpenApi3.d.ts +0 -0
  92. /package/dist/cjs/{util → src/util}/logger.d.ts +0 -0
  93. /package/dist/cjs/{util → src/util}/maxTurnsFromOptions.d.ts +0 -0
  94. /package/dist/cjs/{util → src/util}/naturalZodSchema.d.ts +0 -0
  95. /package/dist/cjs/{util → src/util}/random.d.ts +0 -0
  96. /package/dist/cjs/{util → src/util}/repairFormatKeys.d.ts +0 -0
  97. /package/dist/cjs/{util → src/util}/sse.d.ts +0 -0
  98. /package/dist/cjs/{util → src/util}/tryParseNumber.d.ts +0 -0
  99. /package/dist/esm/{Llm.d.ts → src/Llm.d.ts} +0 -0
  100. /package/dist/esm/{observability → src/observability}/llmobs.d.ts +0 -0
  101. /package/dist/esm/{operate → src/operate}/OperateLoop.d.ts +0 -0
  102. /package/dist/esm/{operate → src/operate}/StreamLoop.d.ts +0 -0
  103. /package/dist/esm/{operate → src/operate}/adapters/AnthropicAdapter.d.ts +0 -0
  104. /package/dist/esm/{operate → src/operate}/adapters/BedrockAdapter.d.ts +0 -0
  105. /package/dist/esm/{operate → src/operate}/adapters/GoogleAdapter.d.ts +0 -0
  106. /package/dist/esm/{operate → src/operate}/adapters/OpenAiAdapter.d.ts +0 -0
  107. /package/dist/esm/{operate → src/operate}/adapters/OpenRouterAdapter.d.ts +0 -0
  108. /package/dist/esm/{operate → src/operate}/adapters/ProviderAdapter.interface.d.ts +0 -0
  109. /package/dist/esm/{operate → src/operate}/adapters/XaiAdapter.d.ts +0 -0
  110. /package/dist/esm/{operate → src/operate}/adapters/index.d.ts +0 -0
  111. /package/dist/esm/{operate → src/operate}/hooks/HookRunner.d.ts +0 -0
  112. /package/dist/esm/{operate → src/operate}/hooks/index.d.ts +0 -0
  113. /package/dist/esm/{operate → src/operate}/index.d.ts +0 -0
  114. /package/dist/esm/{operate → src/operate}/input/InputProcessor.d.ts +0 -0
  115. /package/dist/esm/{operate → src/operate}/input/index.d.ts +0 -0
  116. /package/dist/esm/{operate → src/operate}/response/ResponseBuilder.d.ts +0 -0
  117. /package/dist/esm/{operate → src/operate}/response/index.d.ts +0 -0
  118. /package/dist/esm/{operate → src/operate}/retry/RetryExecutor.d.ts +0 -0
  119. /package/dist/esm/{operate → src/operate}/retry/RetryPolicy.d.ts +0 -0
  120. /package/dist/esm/{operate → src/operate}/retry/createStaleRejectionGuard.d.ts +0 -0
  121. /package/dist/esm/{operate → src/operate}/retry/index.d.ts +0 -0
  122. /package/dist/esm/{operate → src/operate}/retry/isTransientNetworkError.d.ts +0 -0
  123. /package/dist/esm/{providers → src/providers}/anthropic/AnthropicProvider.class.d.ts +0 -0
  124. /package/dist/esm/{providers → src/providers}/anthropic/client.d.ts +0 -0
  125. /package/dist/esm/{providers → src/providers}/anthropic/index.d.ts +0 -0
  126. /package/dist/esm/{providers → src/providers}/anthropic/types.d.ts +0 -0
  127. /package/dist/esm/{providers → src/providers}/anthropic/utils.d.ts +0 -0
  128. /package/dist/esm/{providers → src/providers}/bedrock/BedrockProvider.class.d.ts +0 -0
  129. /package/dist/esm/{providers → src/providers}/bedrock/index.d.ts +0 -0
  130. /package/dist/esm/{providers → src/providers}/bedrock/utils.d.ts +0 -0
  131. /package/dist/esm/{providers → src/providers}/google/GoogleProvider.class.d.ts +0 -0
  132. /package/dist/esm/{providers → src/providers}/google/client.d.ts +0 -0
  133. /package/dist/esm/{providers → src/providers}/google/index.d.ts +0 -0
  134. /package/dist/esm/{providers → src/providers}/google/types.d.ts +0 -0
  135. /package/dist/esm/{providers → src/providers}/google/utils.d.ts +0 -0
  136. /package/dist/esm/{providers → src/providers}/openai/OpenAiProvider.class.d.ts +0 -0
  137. /package/dist/esm/{providers → src/providers}/openai/client.d.ts +0 -0
  138. /package/dist/esm/{providers → src/providers}/openai/index.d.ts +0 -0
  139. /package/dist/esm/{providers → src/providers}/openai/responseFormat.d.ts +0 -0
  140. /package/dist/esm/{providers → src/providers}/openai/types.d.ts +0 -0
  141. /package/dist/esm/{providers → src/providers}/openai/utils.d.ts +0 -0
  142. /package/dist/esm/{providers → src/providers}/openrouter/OpenRouterProvider.class.d.ts +0 -0
  143. /package/dist/esm/{providers → src/providers}/openrouter/client.d.ts +0 -0
  144. /package/dist/esm/{providers → src/providers}/openrouter/index.d.ts +0 -0
  145. /package/dist/esm/{providers → src/providers}/openrouter/utils.d.ts +0 -0
  146. /package/dist/esm/{providers → src/providers}/xai/XaiProvider.class.d.ts +0 -0
  147. /package/dist/esm/{providers → src/providers}/xai/index.d.ts +0 -0
  148. /package/dist/esm/{providers → src/providers}/xai/utils.d.ts +0 -0
  149. /package/dist/esm/{tools → src/tools}/Toolkit.class.d.ts +0 -0
  150. /package/dist/esm/{tools → src/tools}/index.d.ts +0 -0
  151. /package/dist/esm/{tools → src/tools}/random.d.ts +0 -0
  152. /package/dist/esm/{tools → src/tools}/roll.d.ts +0 -0
  153. /package/dist/esm/{tools → src/tools}/time.d.ts +0 -0
  154. /package/dist/esm/{tools → src/tools}/weather.d.ts +0 -0
  155. /package/dist/esm/{types → src/types}/LlmOperateInput.guards.d.ts +0 -0
  156. /package/dist/esm/{types → src/types}/LlmProvider.interface.d.ts +0 -0
  157. /package/dist/esm/{types → src/types}/LlmStreamChunk.interface.d.ts +0 -0
  158. /package/dist/esm/{types → src/types}/LlmTool.interface.d.ts +0 -0
  159. /package/dist/esm/{upload → src/upload}/detectMimeType.d.ts +0 -0
  160. /package/dist/esm/{upload → src/upload}/extractPdfPages.d.ts +0 -0
  161. /package/dist/esm/{upload → src/upload}/index.d.ts +0 -0
  162. /package/dist/esm/{upload → src/upload}/loadLocalFile.d.ts +0 -0
  163. /package/dist/esm/{upload → src/upload}/loadS3File.d.ts +0 -0
  164. /package/dist/esm/{upload → src/upload}/resolveOperateInput.d.ts +0 -0
  165. /package/dist/esm/{util → src/util}/determineModelProvider.d.ts +0 -0
  166. /package/dist/esm/{util → src/util}/extractReasoning.d.ts +0 -0
  167. /package/dist/esm/{util → src/util}/fillFormatArrays.d.ts +0 -0
  168. /package/dist/esm/{util → src/util}/formatOperateInput.d.ts +0 -0
  169. /package/dist/esm/{util → src/util}/formatOperateMessage.d.ts +0 -0
  170. /package/dist/esm/{util → src/util}/jsonSchemaToOpenApi3.d.ts +0 -0
  171. /package/dist/esm/{util → src/util}/logger.d.ts +0 -0
  172. /package/dist/esm/{util → src/util}/maxTurnsFromOptions.d.ts +0 -0
  173. /package/dist/esm/{util → src/util}/naturalZodSchema.d.ts +0 -0
  174. /package/dist/esm/{util → src/util}/random.d.ts +0 -0
  175. /package/dist/esm/{util → src/util}/repairFormatKeys.d.ts +0 -0
  176. /package/dist/esm/{util → src/util}/sse.d.ts +0 -0
  177. /package/dist/esm/{util → src/util}/tryParseNumber.d.ts +0 -0
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ConfigurationError, BadGatewayError, TooManyRequestsError, NotImplementedError } from '@jaypie/errors';
2
- import log$2, { log as log$1 } from '@jaypie/logger';
2
+ import log$1, { log as log$2 } from '@jaypie/logger';
3
3
  import { z } from 'zod/v4';
4
4
  import { placeholders, JAYPIE, resolveValue, sleep } from '@jaypie/kit';
5
5
  import RandomLib from 'random';
@@ -98,7 +98,10 @@ const PROVIDER = {
98
98
  ANTHROPIC: {
99
99
  // https://docs.anthropic.com/en/docs/about-claude/models/overview
100
100
  MAX_TOKENS: {
101
- DEFAULT: 4096,
101
+ // Non-streaming ceiling: responses above ~16K output tokens risk HTTP
102
+ // timeouts; streaming requests resolve to the model maximum instead
103
+ // (see util/maxOutputTokens.ts)
104
+ DEFAULT: 16384,
102
105
  },
103
106
  MODEL: {
104
107
  DEFAULT: FIRST_CLASS_PROVIDER.ANTHROPIC.DEFAULT,
@@ -447,14 +450,12 @@ class BaseProviderAdapter {
447
450
  /**
448
451
  * Default implementation returns false - override for providers with native structured output
449
452
  */
450
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
451
453
  hasStructuredOutput(_response) {
452
454
  return false;
453
455
  }
454
456
  /**
455
457
  * Default implementation returns undefined - override for providers with native structured output
456
458
  */
457
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
458
459
  extractStructuredOutput(_response) {
459
460
  return undefined;
460
461
  }
@@ -765,6 +766,119 @@ function formatOperateInput(input, options) {
765
766
  return [input];
766
767
  }
767
768
 
769
+ // Keywords a JSON Schema object node can carry that Natural Schema has no
770
+ // representation for. Anything present here (or any other unrecognized key)
771
+ // is dropped silently and logged, never thrown.
772
+ const LOSSY_OBJECT_KEYWORDS = [
773
+ "$defs",
774
+ "$id",
775
+ "$ref",
776
+ "$schema",
777
+ "additionalProperties",
778
+ "const",
779
+ "default",
780
+ "description",
781
+ "format",
782
+ "maxLength",
783
+ "maximum",
784
+ "minLength",
785
+ "minimum",
786
+ "multipleOf",
787
+ "nullable",
788
+ "allOf",
789
+ "anyOf",
790
+ "oneOf",
791
+ "pattern",
792
+ ];
793
+ const KNOWN_KEYWORDS = new Set([
794
+ "type",
795
+ "properties",
796
+ "required",
797
+ "items",
798
+ "enum",
799
+ ...LOSSY_OBJECT_KEYWORDS,
800
+ ]);
801
+ /**
802
+ * Duck-type check for a bare JSON Schema object node: `{ type: "object", properties: {...} }`.
803
+ * Does not require the OpenAI-style `{ type: "json_schema", ... }` envelope.
804
+ */
805
+ function isJsonSchema$1(value) {
806
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
807
+ return false;
808
+ }
809
+ const schema = value;
810
+ return (schema.type === "object" &&
811
+ typeof schema.properties === "object" &&
812
+ schema.properties !== null &&
813
+ !Array.isArray(schema.properties));
814
+ }
815
+ /**
816
+ * Convert a Natural Schema to JSON Schema. Lossless: Natural Schema is a
817
+ * strict subset of what JSON Schema can express.
818
+ */
819
+ function naturalSchemaToJsonSchema(schema) {
820
+ return z.toJSONSchema(naturalZodSchema(schema));
821
+ }
822
+ function logDroppedKeywords(schema, path) {
823
+ for (const key of Object.keys(schema)) {
824
+ if (!KNOWN_KEYWORDS.has(key)) {
825
+ log$1.debug(`[jsonSchemaToNaturalSchema] Dropping unrecognized keyword "${key}" at "${path}"`);
826
+ }
827
+ else if (LOSSY_OBJECT_KEYWORDS.includes(key) &&
828
+ schema[key] !== undefined) {
829
+ log$1.debug(`[jsonSchemaToNaturalSchema] Dropping unsupported keyword "${key}" at "${path}"`);
830
+ }
831
+ }
832
+ }
833
+ function convertNode(schema, path) {
834
+ logDroppedKeywords(schema, path);
835
+ if (Array.isArray(schema.enum)) {
836
+ return schema.enum;
837
+ }
838
+ switch (schema.type) {
839
+ case "string":
840
+ return String;
841
+ case "number":
842
+ case "integer":
843
+ return Number;
844
+ case "boolean":
845
+ return Boolean;
846
+ case "array": {
847
+ const items = schema.items;
848
+ if (typeof items !== "object" || items === null || Array.isArray(items)) {
849
+ return Array;
850
+ }
851
+ return [convertNode(items, `${path}[]`)];
852
+ }
853
+ case "object": {
854
+ const properties = schema.properties;
855
+ if (!properties || Object.keys(properties).length === 0) {
856
+ return Object;
857
+ }
858
+ const required = new Set(Array.isArray(schema.required) ? schema.required : []);
859
+ const result = {};
860
+ for (const [key, value] of Object.entries(properties)) {
861
+ if (!required.has(key)) {
862
+ log$1.debug(`[jsonSchemaToNaturalSchema] Field "${path}.${key}" is optional; Natural Schema has no optional marker — treating as required`);
863
+ }
864
+ result[key] = convertNode(value, `${path}.${key}`);
865
+ }
866
+ return result;
867
+ }
868
+ default:
869
+ log$1.debug(`[jsonSchemaToNaturalSchema] Unsupported type "${String(schema.type)}" at "${path}"; defaulting to Object`);
870
+ return Object;
871
+ }
872
+ }
873
+ /**
874
+ * Convert a JSON Schema object node to Natural Schema. Lossy: constraints,
875
+ * descriptions, defaults, unions, and optionality have no Natural Schema
876
+ * representation. Dropped keywords are logged at debug level, never thrown.
877
+ */
878
+ function jsonSchemaToNaturalSchema(schema) {
879
+ return convertNode(schema, "$");
880
+ }
881
+
768
882
  /**
769
883
  * Converts a JSON Schema (Draft 2020-12) object to the OpenAPI 3.0 schema subset
770
884
  * that Gemini's `responseSchema` accepts. This constrains generation (not just validation)
@@ -807,7 +921,53 @@ function jsonSchemaToOpenApi3(schema) {
807
921
  return result;
808
922
  }
809
923
 
810
- const getLogger$6 = () => log$1.lib({ lib: JAYPIE.LIB.LLM });
924
+ const getLogger$6 = () => log$2.lib({ lib: JAYPIE.LIB.LLM });
925
+
926
+ //
927
+ //
928
+ // Constants
929
+ //
930
+ // Non-streaming requests above ~16K output tokens risk HTTP timeouts
931
+ // (Anthropic guidance is to stream anything larger), so non-streaming
932
+ // defaults are capped here and only streaming requests resolve to the
933
+ // full model maximum.
934
+ const NON_STREAMING_MAX_TOKENS = PROVIDER.ANTHROPIC.MAX_TOKENS.DEFAULT;
935
+ // Maximum output tokens by model; first match wins.
936
+ // Providers without low output ceilings (OpenAI, xAI) are intentionally
937
+ // absent — their requests leave the limit unset.
938
+ const MODEL_MAX_OUTPUT_TOKENS = [
939
+ // Anthropic — https://platform.claude.com/docs/en/about-claude/models/overview
940
+ { pattern: /^claude-opus-4-(0$|1$|1-|2025)/, tokens: 32000 },
941
+ { pattern: /^claude-opus-4-5/, tokens: 64000 },
942
+ { pattern: /^claude-sonnet-4-(0$|5$|5-|2025)/, tokens: 64000 },
943
+ { pattern: /haiku/, tokens: 64000 },
944
+ { pattern: /claude|fable|mythos|opus|sonnet/, tokens: 128000 },
945
+ // Google — https://ai.google.dev/gemini-api/docs/models
946
+ { pattern: /gemini-(2\.5|3)/, tokens: 65536 },
947
+ { pattern: /gemini/, tokens: 8192 },
948
+ ];
949
+ //
950
+ //
951
+ // Main
952
+ //
953
+ /**
954
+ * Maximum output tokens the model supports, or undefined when unknown.
955
+ */
956
+ function maxOutputTokens(model) {
957
+ const match = MODEL_MAX_OUTPUT_TOKENS.find(({ pattern }) => pattern.test(model));
958
+ return match?.tokens;
959
+ }
960
+ /**
961
+ * Default output token limit for a request: the model maximum when
962
+ * streaming, capped at the non-streaming maximum otherwise. Returns
963
+ * undefined when the model's maximum is unknown.
964
+ */
965
+ function resolveMaxOutputTokens(model, { stream = false } = {}) {
966
+ const max = maxOutputTokens(model);
967
+ if (max === undefined)
968
+ return undefined;
969
+ return stream ? max : Math.min(max, NON_STREAMING_MAX_TOKENS);
970
+ }
811
971
 
812
972
  // Turn policy constants
813
973
  const MAX_TURNS_ABSOLUTE_LIMIT = 72;
@@ -1633,11 +1793,13 @@ class AnthropicAdapter extends BaseProviderAdapter {
1633
1793
  lastMsg.content = lastMsg.content + "\n\n" + request.instructions;
1634
1794
  }
1635
1795
  }
1796
+ const model = (request.model ||
1797
+ this.defaultModel);
1636
1798
  const anthropicRequest = {
1637
- model: (request.model ||
1638
- this.defaultModel),
1799
+ model,
1639
1800
  messages,
1640
- max_tokens: PROVIDER.ANTHROPIC.MAX_TOKENS.DEFAULT,
1801
+ max_tokens: resolveMaxOutputTokens(model, { stream: request.stream }) ??
1802
+ PROVIDER.ANTHROPIC.MAX_TOKENS.DEFAULT,
1641
1803
  stream: false,
1642
1804
  };
1643
1805
  if (request.system) {
@@ -1649,7 +1811,7 @@ class AnthropicAdapter extends BaseProviderAdapter {
1649
1811
  ? [...request.tools]
1650
1812
  : [];
1651
1813
  if (useFallbackStructuredOutput && request.format) {
1652
- log$1.warn(`[AnthropicAdapter] Using legacy structured_output tool fallback for model ${anthropicRequest.model}; native output_config previously rejected for this model.`);
1814
+ log$2.warn(`[AnthropicAdapter] Using legacy structured_output tool fallback for model ${anthropicRequest.model}; native output_config previously rejected for this model.`);
1653
1815
  allTools.push({
1654
1816
  name: STRUCTURED_OUTPUT_TOOL_NAME$3,
1655
1817
  description: "Output a structured JSON object, " +
@@ -1700,7 +1862,6 @@ class AnthropicAdapter extends BaseProviderAdapter {
1700
1862
  // outputSchema is part of the interface contract but Anthropic now uses
1701
1863
  // native `output_format` (set in buildRequest), so we no longer inject a
1702
1864
  // synthetic structured-output tool here.
1703
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
1704
1865
  _outputSchema) {
1705
1866
  return toolkit.tools.map((tool) => ({
1706
1867
  name: tool.name,
@@ -1713,11 +1874,13 @@ class AnthropicAdapter extends BaseProviderAdapter {
1713
1874
  }
1714
1875
  formatOutputSchema(schema) {
1715
1876
  let jsonSchema;
1716
- // Check if schema is already a JsonObject with type "json_schema"
1717
- if (typeof schema === "object" &&
1877
+ // Check if schema is already a JsonObject either the OpenAI-style
1878
+ // `{ type: "json_schema", ... }` envelope or a bare `{ type: "object", properties }` node
1879
+ if ((typeof schema === "object" &&
1718
1880
  schema !== null &&
1719
1881
  !Array.isArray(schema) &&
1720
- schema.type === "json_schema") {
1882
+ schema.type === "json_schema") ||
1883
+ isJsonSchema$1(schema)) {
1721
1884
  jsonSchema = structuredClone(schema);
1722
1885
  jsonSchema.type = "object"; // Validator does not recognize "json_schema"
1723
1886
  }
@@ -1764,7 +1927,7 @@ class AnthropicAdapter extends BaseProviderAdapter {
1764
1927
  if (wantsStructuredOutput && isStructuredOutputUnsupportedError$1(error)) {
1765
1928
  const model = anthropicRequest.model;
1766
1929
  this.rememberModelRejectsStructuredOutput(model);
1767
- log$1.warn(`[AnthropicAdapter] Model ${model} rejected native output_config; falling back to legacy structured_output tool emulation.`);
1930
+ log$2.warn(`[AnthropicAdapter] Model ${model} rejected native output_config; falling back to legacy structured_output tool emulation.`);
1768
1931
  const fallbackRequest = this.toFallbackStructuredOutputRequest(anthropicRequest);
1769
1932
  return (await anthropic.messages.create(fallbackRequest, signal ? { signal } : undefined));
1770
1933
  }
@@ -2379,6 +2542,10 @@ class BedrockAdapter extends BaseProviderAdapter {
2379
2542
  }));
2380
2543
  }
2381
2544
  formatOutputSchema(schema) {
2545
+ // Bare JSON Schema node: `{ type: "object", properties: {...} }`
2546
+ if (isJsonSchema$1(schema)) {
2547
+ return structuredClone(schema);
2548
+ }
2382
2549
  const zodSchema = schema instanceof z.ZodType
2383
2550
  ? schema
2384
2551
  : naturalZodSchema(schema);
@@ -2827,7 +2994,7 @@ class GoogleAdapter extends BaseProviderAdapter {
2827
2994
  ? [...request.tools]
2828
2995
  : [];
2829
2996
  if (request.format && hasUserTools && !useNativeCombo) {
2830
- log$1.warn(`[GoogleAdapter] Using legacy structured_output tool fallback for model ${geminiRequest.model}; native responseJsonSchema + tools combo is only available on Gemini 3.`);
2997
+ log$2.warn(`[GoogleAdapter] Using legacy structured_output tool fallback for model ${geminiRequest.model}; native responseJsonSchema + tools combo is only available on Gemini 3.`);
2831
2998
  allTools.push({
2832
2999
  name: STRUCTURED_OUTPUT_TOOL_NAME$1,
2833
3000
  description: "Output a structured JSON object, " +
@@ -2881,6 +3048,18 @@ class GoogleAdapter extends BaseProviderAdapter {
2881
3048
  : structuredOutputInstruction,
2882
3049
  };
2883
3050
  }
3051
+ // Default output ceiling: Google's own default (8,192) silently
3052
+ // truncates long generations, so resolve to the model maximum (capped
3053
+ // for non-streaming); providerOptions below override
3054
+ const maxOutputTokens = resolveMaxOutputTokens(geminiRequest.model, {
3055
+ stream: request.stream,
3056
+ });
3057
+ if (maxOutputTokens !== undefined) {
3058
+ geminiRequest.config = {
3059
+ ...geminiRequest.config,
3060
+ maxOutputTokens,
3061
+ };
3062
+ }
2884
3063
  // Add provider-specific options
2885
3064
  if (request.providerOptions) {
2886
3065
  geminiRequest.config = {
@@ -2902,7 +3081,6 @@ class GoogleAdapter extends BaseProviderAdapter {
2902
3081
  // structured output via `responseJsonSchema`/`responseSchema` (or the
2903
3082
  // legacy fake-tool injected in buildRequest as a fallback). We no longer
2904
3083
  // inject a synthetic structured-output tool here.
2905
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2906
3084
  _outputSchema) {
2907
3085
  return toolkit.tools.map((tool) => ({
2908
3086
  name: tool.name,
@@ -2915,11 +3093,13 @@ class GoogleAdapter extends BaseProviderAdapter {
2915
3093
  }
2916
3094
  formatOutputSchema(schema) {
2917
3095
  let jsonSchema;
2918
- // Check if schema is already a JsonObject with type "json_schema"
2919
- if (typeof schema === "object" &&
3096
+ // Check if schema is already a JsonObject either the OpenAI-style
3097
+ // `{ type: "json_schema", ... }` envelope or a bare `{ type: "object", properties }` node
3098
+ if ((typeof schema === "object" &&
2920
3099
  schema !== null &&
2921
3100
  !Array.isArray(schema) &&
2922
- schema.type === "json_schema") {
3101
+ schema.type === "json_schema") ||
3102
+ isJsonSchema$1(schema)) {
2923
3103
  jsonSchema = structuredClone(schema);
2924
3104
  jsonSchema.type = "object";
2925
3105
  }
@@ -2958,7 +3138,7 @@ class GoogleAdapter extends BaseProviderAdapter {
2958
3138
  if (wantsNativeCombo && isStructuredOutputComboUnsupportedError(error)) {
2959
3139
  const model = geminiRequest.model;
2960
3140
  this.rememberModelRejectsStructuredOutputCombo(model);
2961
- log$1.warn(`[GoogleAdapter] Model ${model} rejected native responseJsonSchema + tools combo; falling back to legacy structured_output tool emulation.`);
3141
+ log$2.warn(`[GoogleAdapter] Model ${model} rejected native responseJsonSchema + tools combo; falling back to legacy structured_output tool emulation.`);
2962
3142
  const fallbackRequest = this.toFallbackStructuredOutputRequest(geminiRequest);
2963
3143
  const response = await genAI.models.generateContent({
2964
3144
  model: fallbackRequest.model,
@@ -3886,21 +4066,35 @@ class OpenAiAdapter extends BaseProviderAdapter {
3886
4066
  schema.type === "json_schema") {
3887
4067
  return schema;
3888
4068
  }
3889
- // Convert NaturalSchema to Zod schema if needed
3890
- const zodSchema = schema instanceof z.ZodType
3891
- ? schema
3892
- : naturalZodSchema(schema);
3893
- const responseFormat = zodResponseFormat(zodSchema, "response");
3894
- // Re-spread to drop zod v4's non-enumerable `~standard` Standard-Schema
3895
- // interop marker, then strip `$schema`: OpenAI's strict json_schema subset
3896
- // does not recognize the draft-2020-12 `$schema` keyword, and shipping it
3897
- // can leave strict structured-output enforcement silently disabled (the
3898
- // model then free-forms, omitting required fields and corrupting keys).
3899
- // Mirrors the OpenRouter adapter's sanitization.
3900
- const jsonSchema = {
3901
- ...z.toJSONSchema(zodSchema),
3902
- };
3903
- delete jsonSchema.$schema;
4069
+ // Bare JSON Schema node: `{ type: "object", properties: {...} }`
4070
+ // Skip the zod round-trip and use it directly (still needs the
4071
+ // additionalProperties + envelope treatment below).
4072
+ let jsonSchema;
4073
+ let name = "response";
4074
+ let strict = true;
4075
+ if (isJsonSchema$1(schema)) {
4076
+ jsonSchema = { ...structuredClone(schema) };
4077
+ delete jsonSchema.$schema;
4078
+ }
4079
+ else {
4080
+ // Convert NaturalSchema to Zod schema if needed
4081
+ const zodSchema = schema instanceof z.ZodType
4082
+ ? schema
4083
+ : naturalZodSchema(schema);
4084
+ const responseFormat = zodResponseFormat(zodSchema, "response");
4085
+ // Re-spread to drop zod v4's non-enumerable `~standard` Standard-Schema
4086
+ // interop marker, then strip `$schema`: OpenAI's strict json_schema subset
4087
+ // does not recognize the draft-2020-12 `$schema` keyword, and shipping it
4088
+ // can leave strict structured-output enforcement silently disabled (the
4089
+ // model then free-forms, omitting required fields and corrupting keys).
4090
+ // Mirrors the OpenRouter adapter's sanitization.
4091
+ jsonSchema = {
4092
+ ...z.toJSONSchema(zodSchema),
4093
+ };
4094
+ delete jsonSchema.$schema;
4095
+ name = responseFormat.json_schema.name;
4096
+ strict = responseFormat.json_schema.strict;
4097
+ }
3904
4098
  // OpenAI requires additionalProperties to be false on all objects
3905
4099
  const checks = [jsonSchema];
3906
4100
  while (checks.length > 0) {
@@ -3916,10 +4110,10 @@ class OpenAiAdapter extends BaseProviderAdapter {
3916
4110
  checks.shift();
3917
4111
  }
3918
4112
  return {
3919
- name: responseFormat.json_schema.name,
4113
+ name,
3920
4114
  schema: jsonSchema,
3921
- strict: responseFormat.json_schema.strict,
3922
- type: responseFormat.type,
4115
+ strict,
4116
+ type: "json_schema",
3923
4117
  };
3924
4118
  }
3925
4119
  //
@@ -4325,7 +4519,7 @@ function convertContentToOpenRouter(content) {
4325
4519
  if (item.type === LlmMessageType.InputImage) {
4326
4520
  const url = item.image_url ?? "";
4327
4521
  if (!url) {
4328
- log$1.warn("OpenRouter image content missing image_url; image discarded");
4522
+ log$2.warn("OpenRouter image content missing image_url; image discarded");
4329
4523
  continue;
4330
4524
  }
4331
4525
  parts.push({ type: "image_url", imageUrl: { url } });
@@ -4334,7 +4528,7 @@ function convertContentToOpenRouter(content) {
4334
4528
  if (item.type === LlmMessageType.InputFile) {
4335
4529
  const fileData = typeof item.file_data === "string" ? item.file_data : "";
4336
4530
  if (!fileData) {
4337
- log$1.warn({ filename: item.filename }, "OpenRouter file content missing file_data; file discarded");
4531
+ log$2.warn({ filename: item.filename }, "OpenRouter file content missing file_data; file discarded");
4338
4532
  continue;
4339
4533
  }
4340
4534
  parts.push({
@@ -4347,7 +4541,7 @@ function convertContentToOpenRouter(content) {
4347
4541
  continue;
4348
4542
  }
4349
4543
  // Unknown type - warn and skip
4350
- log$1.warn({ item }, "Unknown content type for OpenRouter; discarded");
4544
+ log$2.warn({ item }, "Unknown content type for OpenRouter; discarded");
4351
4545
  }
4352
4546
  // If no parts remain, return empty string to avoid empty array
4353
4547
  if (parts.length === 0) {
@@ -4495,7 +4689,7 @@ class OpenRouterAdapter extends BaseProviderAdapter {
4495
4689
  ? [...request.tools]
4496
4690
  : [];
4497
4691
  if (useFallbackStructuredOutput && request.format) {
4498
- log$1.warn(`[OpenRouterAdapter] Using legacy structured_output tool fallback for model ${openRouterRequest.model}; native response_format previously rejected for this model.`);
4692
+ log$2.warn(`[OpenRouterAdapter] Using legacy structured_output tool fallback for model ${openRouterRequest.model}; native response_format previously rejected for this model.`);
4499
4693
  allTools.push({
4500
4694
  name: STRUCTURED_OUTPUT_TOOL_NAME,
4501
4695
  description: "REQUIRED: You MUST call this tool to provide your final response. " +
@@ -4551,7 +4745,6 @@ class OpenRouterAdapter extends BaseProviderAdapter {
4551
4745
  // native `response_format` (set in buildRequest), so we no longer inject a
4552
4746
  // synthetic structured-output tool here. The legacy fake-tool injection
4553
4747
  // happens in buildRequest only as a runtime fallback.
4554
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
4555
4748
  _outputSchema) {
4556
4749
  return toolkit.tools.map((tool) => ({
4557
4750
  name: tool.name,
@@ -4561,11 +4754,13 @@ class OpenRouterAdapter extends BaseProviderAdapter {
4561
4754
  }
4562
4755
  formatOutputSchema(schema) {
4563
4756
  let jsonSchema;
4564
- // Check if schema is already a JsonObject with type "json_schema"
4565
- if (typeof schema === "object" &&
4757
+ // Check if schema is already a JsonObject either the OpenAI-style
4758
+ // `{ type: "json_schema", ... }` envelope or a bare `{ type: "object", properties }` node
4759
+ if ((typeof schema === "object" &&
4566
4760
  schema !== null &&
4567
4761
  !Array.isArray(schema) &&
4568
- schema.type === "json_schema") {
4762
+ schema.type === "json_schema") ||
4763
+ isJsonSchema$1(schema)) {
4569
4764
  jsonSchema = structuredClone(schema);
4570
4765
  jsonSchema.type = "object"; // Normalize type
4571
4766
  }
@@ -4628,7 +4823,7 @@ class OpenRouterAdapter extends BaseProviderAdapter {
4628
4823
  if (wantsStructuredOutput && isStructuredOutputUnsupportedError(error)) {
4629
4824
  const model = openRouterRequest.model;
4630
4825
  this.rememberModelRejectsStructuredOutput(model);
4631
- log$1.warn(`[OpenRouterAdapter] Model ${model} rejected native response_format; falling back to legacy structured_output tool emulation.`);
4826
+ log$2.warn(`[OpenRouterAdapter] Model ${model} rejected native response_format; falling back to legacy structured_output tool emulation.`);
4632
4827
  const fallbackRequest = this.toFallbackStructuredOutputRequest(openRouterRequest);
4633
4828
  return (await openRouter.chatCompletion(this.toWireBody(fallbackRequest), signal ? { signal } : undefined));
4634
4829
  }
@@ -5168,7 +5363,7 @@ class XaiAdapter extends OpenAiAdapter {
5168
5363
  const xaiAdapter = new XaiAdapter();
5169
5364
 
5170
5365
  const DEFAULT_TOOL_TYPE = "function";
5171
- const log = log$1.lib({ lib: JAYPIE.LIB.LLM });
5366
+ const log = log$2.lib({ lib: JAYPIE.LIB.LLM });
5172
5367
  function logToolMessage(message, context) {
5173
5368
  log.trace.var({ [context.name]: message });
5174
5369
  }
@@ -6881,6 +7076,7 @@ class StreamLoop {
6881
7076
  messages: state.currentInput,
6882
7077
  model: options.model ?? this.adapter.defaultModel,
6883
7078
  providerOptions: options.providerOptions,
7079
+ stream: true,
6884
7080
  system: options.system,
6885
7081
  temperature: options.temperature,
6886
7082
  tools: state.formattedTools,
@@ -6949,6 +7145,7 @@ class StreamLoop {
6949
7145
  messages: state.currentInput,
6950
7146
  model: options.model ?? this.adapter.defaultModel,
6951
7147
  providerOptions: options.providerOptions,
7148
+ stream: true,
6952
7149
  system: options.system,
6953
7150
  temperature: options.temperature,
6954
7151
  tools: state.formattedTools,
@@ -7384,7 +7581,7 @@ class AnthropicClient {
7384
7581
  }
7385
7582
 
7386
7583
  // Logger
7387
- const getLogger$5 = () => log$1.lib({ lib: JAYPIE.LIB.LLM });
7584
+ const getLogger$5 = () => log$2.lib({ lib: JAYPIE.LIB.LLM });
7388
7585
  // Client initialization
7389
7586
  async function initializeClient$5({ apiKey, } = {}) {
7390
7587
  const logger = getLogger$5();
@@ -7422,7 +7619,7 @@ function prepareMessages$3(message, { data, placeholders } = {}) {
7422
7619
  }
7423
7620
  // Basic text completion
7424
7621
  async function createTextCompletion$1(client, messages, model, systemMessage) {
7425
- log$1.trace("Using text output (unstructured)");
7622
+ log$2.trace("Using text output (unstructured)");
7426
7623
  const params = {
7427
7624
  model,
7428
7625
  messages,
@@ -7431,19 +7628,19 @@ async function createTextCompletion$1(client, messages, model, systemMessage) {
7431
7628
  // Add system instruction if provided
7432
7629
  if (systemMessage) {
7433
7630
  params.system = systemMessage;
7434
- log$1.trace(`System message: ${systemMessage.length} characters`);
7631
+ log$2.trace(`System message: ${systemMessage.length} characters`);
7435
7632
  }
7436
7633
  const response = await client.messages.create(params);
7437
7634
  const firstContent = response.content[0];
7438
7635
  const text = firstContent && "text" in firstContent ? firstContent.text : "";
7439
- log$1.trace(`Assistant reply: ${text.length} characters`);
7636
+ log$2.trace(`Assistant reply: ${text.length} characters`);
7440
7637
  return text;
7441
7638
  }
7442
7639
  // Structured output completion using Anthropic's native `output_config.format`
7443
7640
  // field. Returns a JsonObject parsed and validated against the caller's
7444
7641
  // Zod schema.
7445
7642
  async function createStructuredCompletion$1(client, messages, model, responseSchema, systemMessage) {
7446
- log$1.trace("Using native structured output");
7643
+ log$2.trace("Using native structured output");
7447
7644
  const schema = responseSchema instanceof z.ZodType
7448
7645
  ? responseSchema
7449
7646
  : naturalZodSchema(responseSchema);
@@ -7481,7 +7678,7 @@ async function createStructuredCompletion$1(client, messages, model, responseSch
7481
7678
  if (!validation.success) {
7482
7679
  throw new Error(`JSON response from Anthropic does not match schema: ${textBlock.text}`);
7483
7680
  }
7484
- log$1.trace("Received structured response", { result: validation.data });
7681
+ log$2.trace("Received structured response", { result: validation.data });
7485
7682
  return validation.data;
7486
7683
  }
7487
7684
 
@@ -7593,7 +7790,7 @@ async function loadSdk() {
7593
7790
  throw new ConfigurationError("@aws-sdk/client-bedrock-runtime is required but not installed. Run: npm install @aws-sdk/client-bedrock-runtime");
7594
7791
  }
7595
7792
  }
7596
- const getLogger$4 = () => log$1.lib({ lib: JAYPIE.LIB.LLM });
7793
+ const getLogger$4 = () => log$2.lib({ lib: JAYPIE.LIB.LLM });
7597
7794
  async function initializeClient$4({ region, } = {}) {
7598
7795
  const logger = getLogger$4();
7599
7796
  const resolvedRegion = region || process.env.AWS_REGION || "us-east-1";
@@ -7813,7 +8010,7 @@ class GoogleClient {
7813
8010
  }
7814
8011
 
7815
8012
  // Logger
7816
- const getLogger$3 = () => log$1.lib({ lib: JAYPIE.LIB.LLM });
8013
+ const getLogger$3 = () => log$2.lib({ lib: JAYPIE.LIB.LLM });
7817
8014
  // Client initialization
7818
8015
  async function initializeClient$3({ apiKey, } = {}) {
7819
8016
  const logger = getLogger$3();
@@ -7962,7 +8159,7 @@ class GoogleProvider {
7962
8159
  }
7963
8160
 
7964
8161
  // Logger
7965
- const getLogger$2 = () => log$1.lib({ lib: JAYPIE.LIB.LLM });
8162
+ const getLogger$2 = () => log$2.lib({ lib: JAYPIE.LIB.LLM });
7966
8163
  // Client initialization
7967
8164
  async function initializeClient$2({ apiKey, } = {}) {
7968
8165
  const logger = getLogger$2();
@@ -8266,7 +8463,7 @@ class OpenRouterClient {
8266
8463
  }
8267
8464
 
8268
8465
  // Logger
8269
- const getLogger$1 = () => log$1.lib({ lib: JAYPIE.LIB.LLM });
8466
+ const getLogger$1 = () => log$2.lib({ lib: JAYPIE.LIB.LLM });
8270
8467
  // Client initialization
8271
8468
  async function initializeClient$1({ apiKey, } = {}) {
8272
8469
  const logger = getLogger$1();
@@ -8415,7 +8612,7 @@ class OpenRouterProvider {
8415
8612
  }
8416
8613
 
8417
8614
  // Logger
8418
- const getLogger = () => log$1.lib({ lib: JAYPIE.LIB.LLM });
8615
+ const getLogger = () => log$2.lib({ lib: JAYPIE.LIB.LLM });
8419
8616
  // Client initialization
8420
8617
  async function initializeClient({ apiKey, } = {}) {
8421
8618
  const logger = getLogger();
@@ -8522,7 +8719,7 @@ class Llm {
8522
8719
  let finalModel = model;
8523
8720
  // Legacy: accept "gemini" but warn
8524
8721
  if (providerName === "gemini") {
8525
- log$2.warn(`Provider "gemini" is deprecated, use "${PROVIDER.GOOGLE.NAME}" instead`);
8722
+ log$1.warn(`Provider "gemini" is deprecated, use "${PROVIDER.GOOGLE.NAME}" instead`);
8526
8723
  }
8527
8724
  if (model) {
8528
8725
  const modelDetermined = determineModelProvider(model);
@@ -8636,7 +8833,7 @@ class Llm {
8636
8833
  }
8637
8834
  catch (error) {
8638
8835
  lastError = error;
8639
- log$2.warn(`Provider ${this._provider} failed`, {
8836
+ log$1.warn(`Provider ${this._provider} failed`, {
8640
8837
  error: lastError.message,
8641
8838
  fallbacksRemaining: fallbackChain.length,
8642
8839
  });
@@ -8656,7 +8853,7 @@ class Llm {
8656
8853
  }
8657
8854
  catch (error) {
8658
8855
  lastError = error;
8659
- log$2.warn(`Fallback provider ${fallbackConfig.provider} failed`, {
8856
+ log$1.warn(`Fallback provider ${fallbackConfig.provider} failed`, {
8660
8857
  error: lastError.message,
8661
8858
  fallbacksRemaining: fallbackChain.length - attempts + 1,
8662
8859
  });
@@ -9023,5 +9220,5 @@ const toolkit = new JaypieToolkit(tools);
9023
9220
  [LlmMessageRole.Developer]: "user",
9024
9221
  });
9025
9222
 
9026
- export { BedrockProvider, GoogleProvider as GeminiProvider, GoogleProvider, JaypieToolkit, constants as LLM, Llm, LlmMessageRole, LlmMessageType, LlmStreamChunkType, OpenRouterProvider, Toolkit, XaiProvider, extractReasoning, isLlmOperateInput, isLlmOperateInputContent, isLlmOperateInputFile, isLlmOperateInputImage, toolkit, tools };
9223
+ export { BedrockProvider, GoogleProvider as GeminiProvider, GoogleProvider, JaypieToolkit, constants as LLM, Llm, LlmMessageRole, LlmMessageType, LlmStreamChunkType, OpenRouterProvider, Toolkit, XaiProvider, extractReasoning, isLlmOperateInput, isLlmOperateInputContent, isLlmOperateInputFile, isLlmOperateInputImage, jsonSchemaToNaturalSchema, naturalSchemaToJsonSchema, toolkit, tools };
9027
9224
  //# sourceMappingURL=index.js.map