modelfusion 0.47.1 → 0.47.3

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 (97) hide show
  1. package/README.md +38 -37
  2. package/core/api/loadApiKey.cjs +7 -1
  3. package/core/api/loadApiKey.js +7 -1
  4. package/core/structure/Schema.d.ts +5 -5
  5. package/core/structure/UncheckedSchema.cjs +2 -2
  6. package/core/structure/UncheckedSchema.d.ts +2 -2
  7. package/core/structure/UncheckedSchema.js +2 -2
  8. package/core/structure/ZodSchema.cjs +2 -5
  9. package/core/structure/ZodSchema.d.ts +2 -2
  10. package/core/structure/ZodSchema.js +2 -5
  11. package/event-source/readEventSource.cjs +5 -8
  12. package/event-source/readEventSource.d.ts +1 -1
  13. package/event-source/readEventSource.js +5 -5
  14. package/event-source/readEventSourceStream.cjs +3 -6
  15. package/event-source/readEventSourceStream.js +3 -3
  16. package/guard/fixStructure.cjs +50 -0
  17. package/guard/fixStructure.d.ts +50 -0
  18. package/guard/fixStructure.js +50 -0
  19. package/guard/guard.d.ts +1 -1
  20. package/model-function/generate-structure/generateStructure.cjs +1 -1
  21. package/model-function/generate-structure/generateStructure.js +1 -1
  22. package/model-function/generate-structure/generateStructureOrText.cjs +1 -1
  23. package/model-function/generate-structure/generateStructureOrText.js +1 -1
  24. package/model-function/generate-structure/streamStructure.cjs +1 -1
  25. package/model-function/generate-structure/streamStructure.js +1 -1
  26. package/model-provider/anthropic/AnthropicError.cjs +7 -14
  27. package/model-provider/anthropic/AnthropicError.js +7 -11
  28. package/model-provider/anthropic/AnthropicTextGenerationModel.cjs +2 -15
  29. package/model-provider/anthropic/AnthropicTextGenerationModel.js +2 -12
  30. package/model-provider/automatic1111/Automatic1111Error.cjs +2 -5
  31. package/model-provider/automatic1111/Automatic1111Error.d.ts +1 -1
  32. package/model-provider/automatic1111/Automatic1111Error.js +2 -2
  33. package/model-provider/cohere/CohereError.cjs +2 -5
  34. package/model-provider/cohere/CohereError.js +2 -2
  35. package/model-provider/cohere/CohereTextEmbeddingModel.cjs +8 -11
  36. package/model-provider/cohere/CohereTextEmbeddingModel.d.ts +1 -1
  37. package/model-provider/cohere/CohereTextEmbeddingModel.js +1 -1
  38. package/model-provider/cohere/CohereTextGenerationModel.cjs +22 -21
  39. package/model-provider/cohere/CohereTextGenerationModel.js +22 -18
  40. package/model-provider/cohere/CohereTokenizer.cjs +12 -15
  41. package/model-provider/cohere/CohereTokenizer.d.ts +1 -1
  42. package/model-provider/cohere/CohereTokenizer.js +1 -1
  43. package/model-provider/huggingface/HuggingFaceError.cjs +7 -31
  44. package/model-provider/huggingface/HuggingFaceError.js +7 -28
  45. package/model-provider/huggingface/HuggingFaceImageDescriptionModel.cjs +3 -6
  46. package/model-provider/huggingface/HuggingFaceImageDescriptionModel.d.ts +1 -1
  47. package/model-provider/huggingface/HuggingFaceImageDescriptionModel.js +1 -1
  48. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.cjs +2 -5
  49. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.d.ts +1 -1
  50. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.js +1 -1
  51. package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +3 -6
  52. package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +1 -1
  53. package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +1 -1
  54. package/model-provider/llamacpp/LlamaCppError.cjs +7 -30
  55. package/model-provider/llamacpp/LlamaCppError.js +7 -27
  56. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.cjs +3 -6
  57. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.d.ts +1 -1
  58. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.js +1 -1
  59. package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +53 -66
  60. package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +1 -1
  61. package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +3 -13
  62. package/model-provider/llamacpp/LlamaCppTokenizer.cjs +3 -6
  63. package/model-provider/llamacpp/LlamaCppTokenizer.d.ts +1 -1
  64. package/model-provider/llamacpp/LlamaCppTokenizer.js +1 -1
  65. package/model-provider/openai/OpenAIError.cjs +2 -5
  66. package/model-provider/openai/OpenAIError.js +2 -2
  67. package/model-provider/openai/OpenAITextEmbeddingModel.cjs +11 -14
  68. package/model-provider/openai/OpenAITextEmbeddingModel.d.ts +1 -1
  69. package/model-provider/openai/OpenAITextEmbeddingModel.js +1 -1
  70. package/model-provider/openai/OpenAITextGenerationModel.cjs +26 -39
  71. package/model-provider/openai/OpenAITextGenerationModel.d.ts +1 -1
  72. package/model-provider/openai/OpenAITextGenerationModel.js +3 -13
  73. package/model-provider/openai/OpenAITranscriptionModel.cjs +20 -23
  74. package/model-provider/openai/OpenAITranscriptionModel.d.ts +1 -1
  75. package/model-provider/openai/OpenAITranscriptionModel.js +1 -1
  76. package/model-provider/openai/TikTokenTokenizer.cjs +12 -8
  77. package/model-provider/openai/TikTokenTokenizer.d.ts +0 -3
  78. package/model-provider/openai/TikTokenTokenizer.js +9 -8
  79. package/model-provider/openai/chat/OpenAIChatModel.cjs +21 -21
  80. package/model-provider/openai/chat/OpenAIChatModel.d.ts +1 -1
  81. package/model-provider/openai/chat/OpenAIChatModel.js +2 -2
  82. package/model-provider/openai/chat/OpenAIChatStreamIterable.cjs +2 -6
  83. package/model-provider/openai/chat/OpenAIChatStreamIterable.js +2 -3
  84. package/model-provider/stability/StabilityError.cjs +2 -5
  85. package/model-provider/stability/StabilityError.js +2 -2
  86. package/package.json +1 -1
  87. package/util/JSONParseError.cjs +33 -0
  88. package/util/JSONParseError.d.ts +9 -0
  89. package/util/JSONParseError.js +29 -0
  90. package/util/index.cjs +2 -0
  91. package/util/index.d.ts +2 -0
  92. package/util/index.js +2 -0
  93. package/util/parseJSON.cjs +67 -0
  94. package/util/parseJSON.d.ts +18 -0
  95. package/util/parseJSON.js +58 -0
  96. package/vector-index/memory/MemoryVectorIndex.cjs +7 -10
  97. package/vector-index/memory/MemoryVectorIndex.js +3 -3
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.OpenAITranscriptionResponseFormat = exports.OpenAITranscriptionModel = exports.calculateOpenAITranscriptionCostInMillicents = exports.OPENAI_TRANSCRIPTION_MODELS = void 0;
7
- const zod_1 = __importDefault(require("zod"));
4
+ const zod_1 = require("zod");
8
5
  const callWithRetryAndThrottle_js_1 = require("../../core/api/callWithRetryAndThrottle.cjs");
9
6
  const postToApi_js_1 = require("../../core/api/postToApi.cjs");
10
7
  const AbstractModel_js_1 = require("../../model-function/AbstractModel.cjs");
@@ -125,27 +122,27 @@ async function callOpenAITranscriptionAPI({ api = new OpenAIApiConfiguration_js_
125
122
  abortSignal,
126
123
  });
127
124
  }
128
- const openAITranscriptionJsonSchema = zod_1.default.object({
129
- text: zod_1.default.string(),
125
+ const openAITranscriptionJsonSchema = zod_1.z.object({
126
+ text: zod_1.z.string(),
130
127
  });
131
- const openAITranscriptionVerboseJsonSchema = zod_1.default.object({
132
- task: zod_1.default.literal("transcribe"),
133
- language: zod_1.default.string(),
134
- duration: zod_1.default.number(),
135
- segments: zod_1.default.array(zod_1.default.object({
136
- id: zod_1.default.number(),
137
- seek: zod_1.default.number(),
138
- start: zod_1.default.number(),
139
- end: zod_1.default.number(),
140
- text: zod_1.default.string(),
141
- tokens: zod_1.default.array(zod_1.default.number()),
142
- temperature: zod_1.default.number(),
143
- avg_logprob: zod_1.default.number(),
144
- compression_ratio: zod_1.default.number(),
145
- no_speech_prob: zod_1.default.number(),
146
- transient: zod_1.default.boolean().optional(),
128
+ const openAITranscriptionVerboseJsonSchema = zod_1.z.object({
129
+ task: zod_1.z.literal("transcribe"),
130
+ language: zod_1.z.string(),
131
+ duration: zod_1.z.number(),
132
+ segments: zod_1.z.array(zod_1.z.object({
133
+ id: zod_1.z.number(),
134
+ seek: zod_1.z.number(),
135
+ start: zod_1.z.number(),
136
+ end: zod_1.z.number(),
137
+ text: zod_1.z.string(),
138
+ tokens: zod_1.z.array(zod_1.z.number()),
139
+ temperature: zod_1.z.number(),
140
+ avg_logprob: zod_1.z.number(),
141
+ compression_ratio: zod_1.z.number(),
142
+ no_speech_prob: zod_1.z.number(),
143
+ transient: zod_1.z.boolean().optional(),
147
144
  })),
148
- text: zod_1.default.string(),
145
+ text: zod_1.z.string(),
149
146
  });
150
147
  exports.OpenAITranscriptionResponseFormat = {
151
148
  json: {
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import z from "zod";
2
+ import { z } from "zod";
3
3
  import { FunctionOptions } from "../../core/FunctionOptions.js";
4
4
  import { ApiConfiguration } from "../../core/api/ApiConfiguration.js";
5
5
  import { ResponseHandler } from "../../core/api/postToApi.js";
@@ -1,4 +1,4 @@
1
- import z from "zod";
1
+ import { z } from "zod";
2
2
  import { callWithRetryAndThrottle } from "../../core/api/callWithRetryAndThrottle.js";
3
3
  import { createJsonResponseHandler, createTextResponseHandler, postToApi, } from "../../core/api/postToApi.js";
4
4
  import { AbstractModel } from "../../model-function/AbstractModel.js";
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.TikTokenTokenizer = void 0;
4
- const js_tiktoken_1 = require("js-tiktoken");
7
+ const lite_1 = require("js-tiktoken/lite");
8
+ const cl100k_base_1 = __importDefault(require("js-tiktoken/ranks/cl100k_base"));
9
+ const p50k_base_1 = __importDefault(require("js-tiktoken/ranks/p50k_base"));
10
+ const r50k_base_1 = __importDefault(require("js-tiktoken/ranks/r50k_base"));
5
11
  const never_js_1 = require("../../util/never.cjs");
6
12
  /**
7
13
  * TikToken tokenizer for OpenAI language models.
@@ -29,9 +35,7 @@ class TikTokenTokenizer {
29
35
  writable: true,
30
36
  value: void 0
31
37
  });
32
- this.tiktoken = (0, js_tiktoken_1.getEncoding)("model" in options
33
- ? getEncodingNameForModel(options.model)
34
- : options.encoding);
38
+ this.tiktoken = new lite_1.Tiktoken(getTiktokenBPE(options.model));
35
39
  }
36
40
  async tokenize(text) {
37
41
  return this.tiktoken.encode(text);
@@ -50,12 +54,12 @@ class TikTokenTokenizer {
50
54
  exports.TikTokenTokenizer = TikTokenTokenizer;
51
55
  // implemented here (instead of using js-tiktoken) to be able to quickly updated it
52
56
  // when new models are released
53
- function getEncodingNameForModel(model) {
57
+ function getTiktokenBPE(model) {
54
58
  switch (model) {
55
59
  case "code-davinci-002":
56
60
  case "text-davinci-002":
57
61
  case "text-davinci-003": {
58
- return "p50k_base";
62
+ return p50k_base_1.default;
59
63
  }
60
64
  case "ada":
61
65
  case "babbage":
@@ -64,7 +68,7 @@ function getEncodingNameForModel(model) {
64
68
  case "text-ada-001":
65
69
  case "text-babbage-001":
66
70
  case "text-curie-001": {
67
- return "r50k_base";
71
+ return r50k_base_1.default;
68
72
  }
69
73
  case "babbage-002":
70
74
  case "davinci-002":
@@ -81,7 +85,7 @@ function getEncodingNameForModel(model) {
81
85
  case "gpt-4-32k-0314":
82
86
  case "gpt-4-32k-0613":
83
87
  case "text-embedding-ada-002": {
84
- return "cl100k_base";
88
+ return cl100k_base_1.default;
85
89
  }
86
90
  default: {
87
91
  (0, never_js_1.never)(model);
@@ -1,4 +1,3 @@
1
- import { TiktokenEncoding } from "js-tiktoken";
2
1
  import { FullTokenizer } from "../../model-function/tokenize-text/Tokenizer.js";
3
2
  import { OpenAITextEmbeddingModelType } from "./OpenAITextEmbeddingModel.js";
4
3
  import { OpenAITextGenerationBaseModelType } from "./OpenAITextGenerationModel.js";
@@ -24,8 +23,6 @@ export declare class TikTokenTokenizer implements FullTokenizer {
24
23
  */
25
24
  constructor(options: {
26
25
  model: OpenAIChatBaseModelType | OpenAITextGenerationBaseModelType | OpenAITextEmbeddingModelType;
27
- } | {
28
- encoding: TiktokenEncoding;
29
26
  });
30
27
  private readonly tiktoken;
31
28
  tokenize(text: string): Promise<number[]>;
@@ -1,4 +1,7 @@
1
- import { getEncoding } from "js-tiktoken";
1
+ import { Tiktoken } from "js-tiktoken/lite";
2
+ import cl100k_base from "js-tiktoken/ranks/cl100k_base";
3
+ import p50k_base from "js-tiktoken/ranks/p50k_base";
4
+ import r50k_base from "js-tiktoken/ranks/r50k_base";
2
5
  import { never } from "../../util/never.js";
3
6
  /**
4
7
  * TikToken tokenizer for OpenAI language models.
@@ -26,9 +29,7 @@ export class TikTokenTokenizer {
26
29
  writable: true,
27
30
  value: void 0
28
31
  });
29
- this.tiktoken = getEncoding("model" in options
30
- ? getEncodingNameForModel(options.model)
31
- : options.encoding);
32
+ this.tiktoken = new Tiktoken(getTiktokenBPE(options.model));
32
33
  }
33
34
  async tokenize(text) {
34
35
  return this.tiktoken.encode(text);
@@ -46,12 +47,12 @@ export class TikTokenTokenizer {
46
47
  }
47
48
  // implemented here (instead of using js-tiktoken) to be able to quickly updated it
48
49
  // when new models are released
49
- function getEncodingNameForModel(model) {
50
+ function getTiktokenBPE(model) {
50
51
  switch (model) {
51
52
  case "code-davinci-002":
52
53
  case "text-davinci-002":
53
54
  case "text-davinci-003": {
54
- return "p50k_base";
55
+ return p50k_base;
55
56
  }
56
57
  case "ada":
57
58
  case "babbage":
@@ -60,7 +61,7 @@ function getEncodingNameForModel(model) {
60
61
  case "text-ada-001":
61
62
  case "text-babbage-001":
62
63
  case "text-curie-001": {
63
- return "r50k_base";
64
+ return r50k_base;
64
65
  }
65
66
  case "babbage-002":
66
67
  case "davinci-002":
@@ -77,7 +78,7 @@ function getEncodingNameForModel(model) {
77
78
  case "gpt-4-32k-0314":
78
79
  case "gpt-4-32k-0613":
79
80
  case "text-embedding-ada-002": {
80
- return "cl100k_base";
81
+ return cl100k_base;
81
82
  }
82
83
  default: {
83
84
  never(model);
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.OpenAIChatResponseFormat = exports.OpenAIChatModel = exports.calculateOpenAIChatCostInMillicents = exports.isOpenAIChatModel = exports.getOpenAIChatModelInformation = exports.OPENAI_CHAT_MODELS = void 0;
7
7
  const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
8
- const zod_1 = __importDefault(require("zod"));
8
+ const zod_1 = require("zod");
9
9
  const callWithRetryAndThrottle_js_1 = require("../../../core/api/callWithRetryAndThrottle.cjs");
10
10
  const postToApi_js_1 = require("../../../core/api/postToApi.cjs");
11
11
  const AbstractModel_js_1 = require("../../../model-function/AbstractModel.cjs");
@@ -270,7 +270,7 @@ class OpenAIChatModel extends AbstractModel_js_1.AbstractModel {
270
270
  catch (error) {
271
271
  throw new StructureParseError_js_1.StructureParseError({
272
272
  structureName: structureDefinition.name,
273
- valueText: valueText,
273
+ valueText,
274
274
  cause: error,
275
275
  });
276
276
  }
@@ -370,30 +370,30 @@ class OpenAIChatModel extends AbstractModel_js_1.AbstractModel {
370
370
  }
371
371
  }
372
372
  exports.OpenAIChatModel = OpenAIChatModel;
373
- const openAIChatResponseSchema = zod_1.default.object({
374
- id: zod_1.default.string(),
375
- object: zod_1.default.literal("chat.completion"),
376
- created: zod_1.default.number(),
377
- model: zod_1.default.string(),
378
- choices: zod_1.default.array(zod_1.default.object({
379
- message: zod_1.default.object({
380
- role: zod_1.default.literal("assistant"),
381
- content: zod_1.default.string().nullable(),
382
- function_call: zod_1.default
373
+ const openAIChatResponseSchema = zod_1.z.object({
374
+ id: zod_1.z.string(),
375
+ object: zod_1.z.literal("chat.completion"),
376
+ created: zod_1.z.number(),
377
+ model: zod_1.z.string(),
378
+ choices: zod_1.z.array(zod_1.z.object({
379
+ message: zod_1.z.object({
380
+ role: zod_1.z.literal("assistant"),
381
+ content: zod_1.z.string().nullable(),
382
+ function_call: zod_1.z
383
383
  .object({
384
- name: zod_1.default.string(),
385
- arguments: zod_1.default.string(),
384
+ name: zod_1.z.string(),
385
+ arguments: zod_1.z.string(),
386
386
  })
387
387
  .optional(),
388
388
  }),
389
- index: zod_1.default.number(),
390
- logprobs: zod_1.default.nullable(zod_1.default.any()),
391
- finish_reason: zod_1.default.string(),
389
+ index: zod_1.z.number(),
390
+ logprobs: zod_1.z.nullable(zod_1.z.any()),
391
+ finish_reason: zod_1.z.string(),
392
392
  })),
393
- usage: zod_1.default.object({
394
- prompt_tokens: zod_1.default.number(),
395
- completion_tokens: zod_1.default.number(),
396
- total_tokens: zod_1.default.number(),
393
+ usage: zod_1.z.object({
394
+ prompt_tokens: zod_1.z.number(),
395
+ completion_tokens: zod_1.z.number(),
396
+ total_tokens: zod_1.z.number(),
397
397
  }),
398
398
  });
399
399
  async function callOpenAIChatCompletionAPI({ api = new OpenAIApiConfiguration_js_1.OpenAIApiConfiguration(), abortSignal, responseFormat, model, messages, functions, functionCall, temperature, topP, n, stop, maxTokens, presencePenalty, frequencyPenalty, logitBias, user, }) {
@@ -1,4 +1,4 @@
1
- import z from "zod";
1
+ import { z } from "zod";
2
2
  import { FunctionOptions } from "../../../core/FunctionOptions.js";
3
3
  import { ApiConfiguration } from "../../../core/api/ApiConfiguration.js";
4
4
  import { ResponseHandler } from "../../../core/api/postToApi.js";
@@ -1,5 +1,5 @@
1
1
  import SecureJSON from "secure-json-parse";
2
- import z from "zod";
2
+ import { z } from "zod";
3
3
  import { callWithRetryAndThrottle } from "../../../core/api/callWithRetryAndThrottle.js";
4
4
  import { createJsonResponseHandler, postJsonToApi, } from "../../../core/api/postToApi.js";
5
5
  import { AbstractModel } from "../../../model-function/AbstractModel.js";
@@ -261,7 +261,7 @@ export class OpenAIChatModel extends AbstractModel {
261
261
  catch (error) {
262
262
  throw new StructureParseError({
263
263
  structureName: structureDefinition.name,
264
- valueText: valueText,
264
+ valueText,
265
265
  cause: error,
266
266
  });
267
267
  }
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.createOpenAIChatDeltaIterableQueue = void 0;
7
- const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
8
4
  const zod_1 = require("zod");
9
5
  const AsyncQueue_js_1 = require("../../../event-source/AsyncQueue.cjs");
10
6
  const parseEventSourceStream_js_1 = require("../../../event-source/parseEventSourceStream.cjs");
7
+ const parseJSON_js_1 = require("../../../util/parseJSON.cjs");
11
8
  const chatResponseStreamEventSchema = zod_1.z.object({
12
9
  choices: zod_1.z.array(zod_1.z.object({
13
10
  delta: zod_1.z.object({
@@ -41,8 +38,7 @@ async function createOpenAIChatDeltaIterableQueue(stream, extractDeltaValue) {
41
38
  queue.close();
42
39
  return;
43
40
  }
44
- const json = secure_json_parse_1.default.parse(data);
45
- const parseResult = chatResponseStreamEventSchema.safeParse(json);
41
+ const parseResult = (0, parseJSON_js_1.safeParseJsonWithZod)(data, chatResponseStreamEventSchema);
46
42
  if (!parseResult.success) {
47
43
  queue.push({
48
44
  type: "error",
@@ -1,7 +1,7 @@
1
- import SecureJSON from "secure-json-parse";
2
1
  import { z } from "zod";
3
2
  import { AsyncQueue } from "../../../event-source/AsyncQueue.js";
4
3
  import { parseEventSourceStream } from "../../../event-source/parseEventSourceStream.js";
4
+ import { safeParseJsonWithZod } from "../../../util/parseJSON.js";
5
5
  const chatResponseStreamEventSchema = z.object({
6
6
  choices: z.array(z.object({
7
7
  delta: z.object({
@@ -35,8 +35,7 @@ export async function createOpenAIChatDeltaIterableQueue(stream, extractDeltaVal
35
35
  queue.close();
36
36
  return;
37
37
  }
38
- const json = SecureJSON.parse(data);
39
- const parseResult = chatResponseStreamEventSchema.safeParse(json);
38
+ const parseResult = safeParseJsonWithZod(data, chatResponseStreamEventSchema);
40
39
  if (!parseResult.success) {
41
40
  queue.push({
42
41
  type: "error",
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.failedStabilityCallResponseHandler = exports.StabilityError = exports.stabilityErrorDataSchema = void 0;
7
- const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
8
4
  const zod_1 = require("zod");
9
5
  const ApiCallError_js_1 = require("../../core/api/ApiCallError.cjs");
6
+ const parseJSON_js_1 = require("../../util/parseJSON.cjs");
10
7
  exports.stabilityErrorDataSchema = zod_1.z.object({
11
8
  message: zod_1.z.string(),
12
9
  });
@@ -25,7 +22,7 @@ class StabilityError extends ApiCallError_js_1.ApiCallError {
25
22
  exports.StabilityError = StabilityError;
26
23
  const failedStabilityCallResponseHandler = async ({ response, url, requestBodyValues }) => {
27
24
  const responseBody = await response.text();
28
- const parsedError = exports.stabilityErrorDataSchema.parse(secure_json_parse_1.default.parse(responseBody));
25
+ const parsedError = (0, parseJSON_js_1.parseJsonWithZod)(responseBody, exports.stabilityErrorDataSchema);
29
26
  return new StabilityError({
30
27
  url,
31
28
  requestBodyValues,
@@ -1,6 +1,6 @@
1
- import SecureJSON from "secure-json-parse";
2
1
  import { z } from "zod";
3
2
  import { ApiCallError } from "../../core/api/ApiCallError.js";
3
+ import { parseJsonWithZod } from "../../util/parseJSON.js";
4
4
  export const stabilityErrorDataSchema = z.object({
5
5
  message: z.string(),
6
6
  });
@@ -18,7 +18,7 @@ export class StabilityError extends ApiCallError {
18
18
  }
19
19
  export const failedStabilityCallResponseHandler = async ({ response, url, requestBodyValues }) => {
20
20
  const responseBody = await response.text();
21
- const parsedError = stabilityErrorDataSchema.parse(SecureJSON.parse(responseBody));
21
+ const parsedError = parseJsonWithZod(responseBody, stabilityErrorDataSchema);
22
22
  return new StabilityError({
23
23
  url,
24
24
  requestBodyValues,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modelfusion",
3
3
  "description": "Build multimodal applications, chatbots, and agents with JavaScript and TypeScript.",
4
- "version": "0.47.1",
4
+ "version": "0.47.3",
5
5
  "author": "Lars Grammel",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JSONParseError = void 0;
4
+ const getErrorMessage_js_1 = require("./getErrorMessage.cjs");
5
+ class JSONParseError extends Error {
6
+ constructor({ valueText, cause }) {
7
+ super(`JSON parsing failed: ` +
8
+ `Value: ${valueText}.\n` +
9
+ `Error message: ${(0, getErrorMessage_js_1.getErrorMessage)(cause)}`);
10
+ Object.defineProperty(this, "structureName", {
11
+ enumerable: true,
12
+ configurable: true,
13
+ writable: true,
14
+ value: void 0
15
+ });
16
+ Object.defineProperty(this, "cause", {
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ value: void 0
21
+ });
22
+ Object.defineProperty(this, "valueText", {
23
+ enumerable: true,
24
+ configurable: true,
25
+ writable: true,
26
+ value: void 0
27
+ });
28
+ this.name = "JSONParseError";
29
+ this.cause = cause;
30
+ this.valueText = valueText;
31
+ }
32
+ }
33
+ exports.JSONParseError = JSONParseError;
@@ -0,0 +1,9 @@
1
+ export declare class JSONParseError extends Error {
2
+ readonly structureName: string;
3
+ readonly cause: unknown;
4
+ readonly valueText: string;
5
+ constructor({ valueText, cause }: {
6
+ valueText: string;
7
+ cause: unknown;
8
+ });
9
+ }
@@ -0,0 +1,29 @@
1
+ import { getErrorMessage } from "./getErrorMessage.js";
2
+ export class JSONParseError extends Error {
3
+ constructor({ valueText, cause }) {
4
+ super(`JSON parsing failed: ` +
5
+ `Value: ${valueText}.\n` +
6
+ `Error message: ${getErrorMessage(cause)}`);
7
+ Object.defineProperty(this, "structureName", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: void 0
12
+ });
13
+ Object.defineProperty(this, "cause", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ Object.defineProperty(this, "valueText", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: void 0
24
+ });
25
+ this.name = "JSONParseError";
26
+ this.cause = cause;
27
+ this.valueText = valueText;
28
+ }
29
+ }
package/util/index.cjs CHANGED
@@ -14,5 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./JSONParseError.cjs"), exports);
17
18
  __exportStar(require("./cosineSimilarity.cjs"), exports);
18
19
  __exportStar(require("./getAudioFileExtension.cjs"), exports);
20
+ __exportStar(require("./parseJSON.cjs"), exports);
package/util/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
+ export * from "./JSONParseError.js";
1
2
  export * from "./cosineSimilarity.js";
2
3
  export * from "./getAudioFileExtension.js";
4
+ export * from "./parseJSON.js";
package/util/index.js CHANGED
@@ -1,2 +1,4 @@
1
+ export * from "./JSONParseError.js";
1
2
  export * from "./cosineSimilarity.js";
2
3
  export * from "./getAudioFileExtension.js";
4
+ export * from "./parseJSON.js";
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.safeParseJsonWithSchema = exports.safeParseJsonWithZod = exports.parseJsonWithZod = void 0;
7
+ const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
8
+ const JSONParseError_js_1 = require("./JSONParseError.cjs");
9
+ function parseJsonWithZod(json, schema) {
10
+ try {
11
+ const parsedJson = secure_json_parse_1.default.parse(json);
12
+ return schema.parse(parsedJson);
13
+ }
14
+ catch (error) {
15
+ throw new JSONParseError_js_1.JSONParseError({
16
+ valueText: json,
17
+ cause: error,
18
+ });
19
+ }
20
+ }
21
+ exports.parseJsonWithZod = parseJsonWithZod;
22
+ function safeParseJsonWithZod(json, schema) {
23
+ try {
24
+ const parsedJson = secure_json_parse_1.default.parse(json);
25
+ const validationResult = schema.safeParse(parsedJson);
26
+ if (validationResult.success) {
27
+ return validationResult;
28
+ }
29
+ return {
30
+ success: false,
31
+ error: new JSONParseError_js_1.JSONParseError({
32
+ valueText: json,
33
+ cause: validationResult.error,
34
+ }),
35
+ };
36
+ }
37
+ catch (error) {
38
+ throw new JSONParseError_js_1.JSONParseError({
39
+ valueText: json,
40
+ cause: error,
41
+ });
42
+ }
43
+ }
44
+ exports.safeParseJsonWithZod = safeParseJsonWithZod;
45
+ function safeParseJsonWithSchema(json, schema) {
46
+ try {
47
+ const parsedJson = secure_json_parse_1.default.parse(json);
48
+ const validationResult = schema.validate(parsedJson);
49
+ if (validationResult.success) {
50
+ return validationResult;
51
+ }
52
+ return {
53
+ success: false,
54
+ error: new JSONParseError_js_1.JSONParseError({
55
+ valueText: json,
56
+ cause: validationResult.error,
57
+ }),
58
+ };
59
+ }
60
+ catch (error) {
61
+ throw new JSONParseError_js_1.JSONParseError({
62
+ valueText: json,
63
+ cause: error,
64
+ });
65
+ }
66
+ }
67
+ exports.safeParseJsonWithSchema = safeParseJsonWithSchema;
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import { Schema } from "../core/structure/Schema.js";
3
+ import { JSONParseError } from "./JSONParseError.js";
4
+ export declare function parseJsonWithZod<T>(json: string, schema: z.Schema<T>): T;
5
+ export declare function safeParseJsonWithZod<T>(json: string, schema: z.Schema<T>): {
6
+ success: true;
7
+ data: T;
8
+ } | {
9
+ success: false;
10
+ error: JSONParseError;
11
+ };
12
+ export declare function safeParseJsonWithSchema<T>(json: string, schema: Schema<T>): {
13
+ success: true;
14
+ data: T;
15
+ } | {
16
+ success: false;
17
+ error: JSONParseError;
18
+ };
@@ -0,0 +1,58 @@
1
+ import SecureJSON from "secure-json-parse";
2
+ import { JSONParseError } from "./JSONParseError.js";
3
+ export function parseJsonWithZod(json, schema) {
4
+ try {
5
+ const parsedJson = SecureJSON.parse(json);
6
+ return schema.parse(parsedJson);
7
+ }
8
+ catch (error) {
9
+ throw new JSONParseError({
10
+ valueText: json,
11
+ cause: error,
12
+ });
13
+ }
14
+ }
15
+ export function safeParseJsonWithZod(json, schema) {
16
+ try {
17
+ const parsedJson = SecureJSON.parse(json);
18
+ const validationResult = schema.safeParse(parsedJson);
19
+ if (validationResult.success) {
20
+ return validationResult;
21
+ }
22
+ return {
23
+ success: false,
24
+ error: new JSONParseError({
25
+ valueText: json,
26
+ cause: validationResult.error,
27
+ }),
28
+ };
29
+ }
30
+ catch (error) {
31
+ throw new JSONParseError({
32
+ valueText: json,
33
+ cause: error,
34
+ });
35
+ }
36
+ }
37
+ export function safeParseJsonWithSchema(json, schema) {
38
+ try {
39
+ const parsedJson = SecureJSON.parse(json);
40
+ const validationResult = schema.validate(parsedJson);
41
+ if (validationResult.success) {
42
+ return validationResult;
43
+ }
44
+ return {
45
+ success: false,
46
+ error: new JSONParseError({
47
+ valueText: json,
48
+ cause: validationResult.error,
49
+ }),
50
+ };
51
+ }
52
+ catch (error) {
53
+ throw new JSONParseError({
54
+ valueText: json,
55
+ cause: error,
56
+ });
57
+ }
58
+ }