modelfusion 0.134.0 → 0.135.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.
@@ -5,7 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
8
  var __export = (target, all) => {
10
9
  for (var name in all)
11
10
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -27,10 +26,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
26
  mod
28
27
  ));
29
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
- var __publicField = (obj, key, value) => {
31
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
32
- return value;
33
- };
34
29
 
35
30
  // src/internal/index.ts
36
31
  var internal_exports = {};
@@ -147,14 +142,14 @@ function getErrorMessage(error) {
147
142
 
148
143
  // src/core/schema/JSONParseError.ts
149
144
  var JSONParseError = class extends Error {
145
+ // note: property order determines debugging output
146
+ text;
147
+ cause;
150
148
  constructor({ text, cause }) {
151
149
  super(
152
150
  `JSON parsing failed: Text: ${text}.
153
151
  Error message: ${getErrorMessage(cause)}`
154
152
  );
155
- // note: property order determines debugging output
156
- __publicField(this, "text");
157
- __publicField(this, "cause");
158
153
  this.name = "JSONParseError";
159
154
  this.cause = cause;
160
155
  this.text = text;
@@ -172,13 +167,13 @@ Error message: ${getErrorMessage(cause)}`
172
167
 
173
168
  // src/core/schema/TypeValidationError.ts
174
169
  var TypeValidationError = class extends Error {
170
+ value;
171
+ cause;
175
172
  constructor({ value, cause }) {
176
173
  super(
177
174
  `Type validation failed: Value: ${JSON.stringify(value)}.
178
175
  Error message: ${getErrorMessage(cause)}`
179
176
  );
180
- __publicField(this, "value");
181
- __publicField(this, "cause");
182
177
  this.name = "TypeValidationError";
183
178
  this.cause = cause;
184
179
  this.value = value;
@@ -280,6 +275,13 @@ function safeParseJSON({
280
275
 
281
276
  // src/core/api/ApiCallError.ts
282
277
  var ApiCallError = class extends Error {
278
+ url;
279
+ requestBodyValues;
280
+ statusCode;
281
+ responseBody;
282
+ cause;
283
+ isRetryable;
284
+ data;
283
285
  constructor({
284
286
  message,
285
287
  url,
@@ -291,13 +293,6 @@ var ApiCallError = class extends Error {
291
293
  data
292
294
  }) {
293
295
  super(message);
294
- __publicField(this, "url");
295
- __publicField(this, "requestBodyValues");
296
- __publicField(this, "statusCode");
297
- __publicField(this, "responseBody");
298
- __publicField(this, "cause");
299
- __publicField(this, "isRetryable");
300
- __publicField(this, "data");
301
296
  this.name = "ApiCallError";
302
297
  this.url = url;
303
298
  this.requestBodyValues = requestBodyValues;
@@ -512,12 +507,12 @@ var import_nanoid = require("nanoid");
512
507
 
513
508
  // src/core/FunctionEventSource.ts
514
509
  var FunctionEventSource = class {
510
+ observers;
511
+ errorHandler;
515
512
  constructor({
516
513
  observers,
517
514
  errorHandler
518
515
  }) {
519
- __publicField(this, "observers");
520
- __publicField(this, "errorHandler");
521
516
  this.observers = observers;
522
517
  this.errorHandler = errorHandler ?? ((error) => console.error(error));
523
518
  }
@@ -673,9 +668,7 @@ function startDurationMeasurement() {
673
668
  return globalThis.performance != null ? new PerformanceNowDurationMeasurement() : new DateDurationMeasurement();
674
669
  }
675
670
  var PerformanceNowDurationMeasurement = class {
676
- constructor() {
677
- __publicField(this, "startTime", globalThis.performance.now());
678
- }
671
+ startTime = globalThis.performance.now();
679
672
  get startEpochSeconds() {
680
673
  return Math.floor(
681
674
  (globalThis.performance.timeOrigin + this.startTime) / 1e3
@@ -689,9 +682,7 @@ var PerformanceNowDurationMeasurement = class {
689
682
  }
690
683
  };
691
684
  var DateDurationMeasurement = class {
692
- constructor() {
693
- __publicField(this, "startTime", Date.now());
694
- }
685
+ startTime = Date.now();
695
686
  get startEpochSeconds() {
696
687
  return Math.floor(this.startTime / 1e3);
697
688
  }
@@ -801,8 +792,8 @@ async function executeFunctionCall({
801
792
 
802
793
  // src/model-function/AbstractModel.ts
803
794
  var AbstractModel = class {
795
+ settings;
804
796
  constructor({ settings }) {
805
- __publicField(this, "settings");
806
797
  this.settings = settings;
807
798
  }
808
799
  // implemented as a separate accessor to remove all other properties from the model
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/internal/index.ts","../../src/core/api/retryNever.ts","../../src/core/api/throttleOff.ts","../../src/core/api/callWithRetryAndThrottle.ts","../../src/core/api/LoadAPIKeyError.ts","../../src/core/api/loadApiKey.ts","../../src/util/format/UInt8Utils.ts","../../src/util/format/DataContent.ts","../../src/core/schema/parseJSON.ts","../../src/util/getErrorMessage.ts","../../src/core/schema/JSONParseError.ts","../../src/core/schema/TypeValidationError.ts","../../src/core/schema/validateTypes.ts","../../src/core/api/ApiCallError.ts","../../src/core/api/postToApi.ts","../../src/core/executeFunctionCall.ts","../../src/core/FunctionEventSource.ts","../../src/core/ModelFusionConfiguration.ts","../../src/core/api/AbortError.ts","../../src/core/getFunctionCallLogger.ts","../../src/util/detectRuntime.ts","../../src/core/getRun.ts","../../src/util/DurationMeasurement.ts","../../src/util/runSafe.ts","../../src/model-function/AbstractModel.ts","../../src/util/streaming/convertReadableStreamToAsyncIterable.ts","../../src/util/streaming/EventSourceParserStream.ts","../../src/util/streaming/parseEventSourceStream.ts"],"sourcesContent":["export * from \"../core/ExtensionFunctionEvent\";\nexport { callWithRetryAndThrottle } from \"../core/api/callWithRetryAndThrottle\";\nexport { loadApiKey } from \"../core/api/loadApiKey\";\nexport * from \"../core/api/postToApi\";\nexport { executeFunctionCall } from \"../core/executeFunctionCall\";\nexport { AbstractModel } from \"../model-function/AbstractModel\";\nexport { ErrorHandler } from \"../util/ErrorHandler\";\nexport { parseEventSourceStream } from \"../util/streaming/parseEventSourceStream\";\n","/**\n * The `retryNever` strategy never retries a failed API call.\n */\nexport const retryNever =\n () =>\n async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n f();\n","import { ThrottleFunction } from \"./ThrottleFunction\";\n\n/**\n * The `throttleOff` strategy does not limit parallel API calls.\n */\nexport const throttleOff = (): ThrottleFunction => (fn) => fn();\n","import { RetryFunction } from \"./RetryFunction\";\nimport { retryNever } from \"./retryNever\";\nimport { ThrottleFunction } from \"./ThrottleFunction\";\nimport { throttleOff } from \"./throttleOff\";\n\nexport const callWithRetryAndThrottle = async <OUTPUT>({\n retry = retryNever(),\n throttle = throttleOff(),\n call,\n}: {\n retry?: RetryFunction;\n throttle?: ThrottleFunction;\n call: () => PromiseLike<OUTPUT>;\n}): Promise<OUTPUT> => retry(async () => throttle(call));\n","export class LoadAPIKeyError extends Error {\n constructor({ message }: { message: string }) {\n super(message);\n\n this.name = \"LoadAPIKeyError\";\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n };\n }\n}\n","import { LoadAPIKeyError } from \"./LoadAPIKeyError\";\n\nexport function loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = \"apiKey\",\n description,\n}: {\n apiKey: string | undefined;\n environmentVariableName: string;\n apiKeyParameterName?: string;\n description: string;\n}): string {\n if (apiKey != null) {\n return apiKey;\n }\n\n if (typeof process === \"undefined\") {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter into the API configuration. Environment variables is not supported in this environment.`,\n });\n }\n\n apiKey = process.env[environmentVariableName];\n\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter into the API configuration or set it as an environment variable named ${environmentVariableName}.`,\n });\n }\n\n return apiKey;\n}\n","/*\n * MIT License\n *\n * Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// copied from: https://github.com/sindresorhus/uint8array-extras/blob/main/index.js\n\nexport function base64ToUint8Array(base64String: string) {\n return Uint8Array.from(\n globalThis.atob(base64UrlToBase64(base64String)),\n (x) => x.codePointAt(0)!\n );\n}\n\n// Reference: https://phuoc.ng/collection/this-vs-that/concat-vs-push/\nconst MAX_BLOCK_SIZE = 65_535;\n\nexport function uint8ArrayToBase64(array: Uint8Array) {\n let base64;\n\n if (array.length < MAX_BLOCK_SIZE) {\n // Required as `btoa` and `atob` don't properly support Unicode: https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n base64 = globalThis.btoa(String.fromCodePoint(...array));\n } else {\n base64 = \"\";\n for (const value of array) {\n base64 += String.fromCodePoint(value);\n }\n\n base64 = globalThis.btoa(base64);\n }\n\n return base64;\n}\n\nfunction base64UrlToBase64(base64url: string) {\n return base64url.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n}\n","import { base64ToUint8Array, uint8ArrayToBase64 } from \"./UInt8Utils\";\n\n/**\n * Data content. Can either be a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer.\n */\nexport type DataContent = string | Uint8Array | ArrayBuffer | Buffer;\n\nexport function convertDataContentToBase64String(content: DataContent): string {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (content instanceof ArrayBuffer) {\n return uint8ArrayToBase64(new Uint8Array(content));\n }\n\n return uint8ArrayToBase64(content);\n}\n\nexport function convertDataContentToUint8Array(\n content: DataContent\n): Uint8Array {\n if (content instanceof Uint8Array) {\n return content;\n }\n\n if (typeof content === \"string\") {\n return base64ToUint8Array(content);\n }\n\n if (content instanceof ArrayBuffer) {\n return new Uint8Array(content);\n }\n\n throw new Error(\n `Invalid data content. Expected a string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`\n );\n}\n","import SecureJSON from \"secure-json-parse\";\nimport { JSONParseError } from \"./JSONParseError\";\nimport { Schema } from \"./Schema\";\nimport { safeValidateTypes, validateTypes } from \"./validateTypes\";\nimport { TypeValidationError } from \"./TypeValidationError\";\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {unknown} - The parsed JSON object.\n */\nexport function parseJSON({ text }: { text: string }): unknown;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Schema<T>} schema - The schema to use for parsing the JSON.\n * @returns {T} - The parsed object.\n */\nexport function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema: Schema<T>;\n}): T;\nexport function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: Schema<T>;\n}): T {\n try {\n const value = SecureJSON.parse(text);\n\n if (schema == null) {\n return value;\n }\n\n return validateTypes({ value, schema });\n } catch (error) {\n if (\n error instanceof JSONParseError ||\n error instanceof TypeValidationError\n ) {\n throw error;\n }\n\n throw new JSONParseError({ text, cause: error });\n }\n}\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {object} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport function safeParseJSON({\n text,\n}: {\n text: string;\n}):\n | { success: true; value: unknown }\n | { success: false; error: JSONParseError | TypeValidationError };\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Schema<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema: Schema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: JSONParseError | TypeValidationError };\nexport function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: Schema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: JSONParseError | TypeValidationError } {\n try {\n const value = SecureJSON.parse(text);\n\n if (schema == null) {\n return {\n success: true,\n value: value as T,\n };\n }\n\n return safeValidateTypes({ value, schema });\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof JSONParseError\n ? error\n : new JSONParseError({ text, cause: error }),\n };\n }\n}\n","export function getErrorMessage(error: unknown | undefined) {\n if (error == null) {\n return \"unknown error\";\n }\n\n if (typeof error === \"string\") {\n return error;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n return JSON.stringify(error);\n}\n","import { getErrorMessage } from \"../../util/getErrorMessage\";\n\nexport class JSONParseError extends Error {\n // note: property order determines debugging output\n readonly text: string;\n readonly cause: unknown;\n\n constructor({ text, cause }: { text: string; cause: unknown }) {\n super(\n `JSON parsing failed: ` +\n `Text: ${text}.\\n` +\n `Error message: ${getErrorMessage(cause)}`\n );\n\n this.name = \"JSONParseError\";\n\n this.cause = cause;\n this.text = text;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n cause: this.cause,\n stack: this.stack,\n\n valueText: this.text,\n };\n }\n}\n","import { getErrorMessage } from \"../../util/getErrorMessage\";\n\nexport class TypeValidationError extends Error {\n readonly value: unknown;\n readonly cause: unknown;\n\n constructor({ value, cause }: { value: unknown; cause: unknown }) {\n super(\n `Type validation failed: ` +\n `Value: ${JSON.stringify(value)}.\\n` +\n `Error message: ${getErrorMessage(cause)}`\n );\n\n this.name = \"TypeValidationError\";\n\n this.cause = cause;\n this.value = value;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n cause: this.cause,\n stack: this.stack,\n\n value: this.value,\n };\n }\n}\n","import { Schema } from \"./Schema\";\nimport { TypeValidationError } from \"./TypeValidationError\";\n\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Schema<T>} options.schema - The schema to use for validating the JSON.\n * @returns {T} - The typed object.\n */\nexport function validateTypes<T>({\n value,\n schema,\n}: {\n value: unknown;\n schema: Schema<T>;\n}): T {\n try {\n const validationResult = schema.validate(value);\n\n if (!validationResult.success) {\n throw new TypeValidationError({\n value,\n cause: validationResult.error,\n });\n }\n\n return validationResult.value;\n } catch (error) {\n if (error instanceof TypeValidationError) {\n throw error;\n }\n\n throw new TypeValidationError({ value, cause: error });\n }\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Schema<T>} options.schema - The schema to use for validating the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport function safeValidateTypes<T>({\n value,\n schema,\n}: {\n value: unknown;\n schema: Schema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: TypeValidationError } {\n try {\n const validationResult = schema.validate(value);\n\n if (validationResult.success) {\n return validationResult;\n }\n\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: validationResult.error,\n }),\n };\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof TypeValidationError\n ? error\n : new TypeValidationError({ value, cause: error }),\n };\n }\n}\n","export class ApiCallError extends Error {\n readonly url: string;\n readonly requestBodyValues: unknown;\n readonly statusCode?: number;\n readonly responseBody?: string;\n readonly cause?: unknown;\n readonly isRetryable: boolean;\n readonly data?: unknown;\n\n constructor({\n message,\n url,\n requestBodyValues,\n statusCode,\n responseBody,\n cause,\n isRetryable = statusCode != null &&\n (statusCode === 429 || statusCode >= 500),\n data,\n }: {\n message: string;\n url: string;\n requestBodyValues: unknown;\n statusCode?: number;\n responseBody?: string;\n cause?: unknown;\n isRetryable?: boolean;\n data?: unknown;\n }) {\n super(message);\n\n this.name = \"ApiCallError\";\n\n this.url = url;\n this.requestBodyValues = requestBodyValues;\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n this.cause = cause;\n this.isRetryable = isRetryable;\n this.data = data;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n url: this.url,\n requestBodyValues: this.requestBodyValues,\n statusCode: this.statusCode,\n responseBody: this.responseBody,\n cause: this.cause,\n isRetryable: this.isRetryable,\n data: this.data,\n };\n }\n}\n","import { convertDataContentToUint8Array } from \"../../util/format/DataContent\";\nimport { Schema } from \"../schema/Schema\";\nimport { parseJSON, safeParseJSON } from \"../schema/parseJSON\";\nimport { ApiCallError } from \"./ApiCallError\";\n\nexport type ResponseHandler<T> = (options: {\n url: string;\n requestBodyValues: unknown;\n response: Response;\n}) => PromiseLike<T>;\n\nexport const createJsonErrorResponseHandler =\n <T>({\n errorSchema,\n errorToMessage,\n isRetryable,\n }: {\n errorSchema: Schema<T>;\n errorToMessage: (error: T) => string;\n isRetryable?: (response: Response, error?: T) => boolean;\n }): ResponseHandler<ApiCallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n // Some providers return an empty response body for some errors:\n if (responseBody.trim() === \"\") {\n return new ApiCallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n isRetryable: isRetryable?.(response),\n });\n }\n\n // resilient parsing in case the response is not JSON or does not match the schema:\n try {\n const parsedError = parseJSON({\n text: responseBody,\n schema: errorSchema,\n });\n\n return new ApiCallError({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable?.(response, parsedError),\n });\n } catch (parseError) {\n return new ApiCallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n isRetryable: isRetryable?.(response),\n });\n }\n };\n\nexport const createTextErrorResponseHandler =\n ({\n isRetryable,\n }: {\n isRetryable?: (response: Response) => boolean;\n } = {}): ResponseHandler<ApiCallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n return new ApiCallError({\n message: responseBody.trim() !== \"\" ? responseBody : response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n isRetryable: isRetryable?.(response),\n });\n };\n\nexport const createJsonResponseHandler =\n <T>(responseSchema: Schema<T>): ResponseHandler<T> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n const parsedResult = safeParseJSON({\n text: responseBody,\n schema: responseSchema,\n });\n\n if (!parsedResult.success) {\n throw new ApiCallError({\n message: \"Invalid JSON response\",\n cause: parsedResult.error,\n statusCode: response.status,\n responseBody,\n url,\n requestBodyValues,\n });\n }\n\n return parsedResult.value;\n };\n\nexport const createTextResponseHandler =\n (): ResponseHandler<string> =>\n async ({ response }) =>\n response.text();\n\nexport const createAudioMpegResponseHandler =\n (): ResponseHandler<Uint8Array> =>\n async ({ response, url, requestBodyValues }) => {\n if (response.headers.get(\"Content-Type\") !== \"audio/mpeg\") {\n throw new ApiCallError({\n message: \"Invalid Content-Type (must be audio/mpeg)\",\n statusCode: response.status,\n url,\n requestBodyValues,\n });\n }\n\n return convertDataContentToUint8Array(await response.arrayBuffer());\n };\n\nexport const postJsonToApi = async <T>({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n}: {\n url: string;\n headers?: Record<string, string>;\n body: unknown;\n failedResponseHandler: ResponseHandler<ApiCallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n}) =>\n postToApi({\n url,\n headers: {\n ...headers,\n \"Content-Type\": \"application/json\",\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n });\n\nexport const postToApi = async <T>({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n}: {\n url: string;\n headers?: Record<string, string>;\n body: {\n content: string | FormData | Uint8Array;\n values: unknown;\n };\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n}) => {\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: body.content,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n try {\n throw await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\" || error instanceof ApiCallError) {\n throw error;\n }\n }\n\n throw new ApiCallError({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n requestBodyValues: body.values,\n });\n }\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\" || error instanceof ApiCallError) {\n throw error;\n }\n }\n\n throw new ApiCallError({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n requestBodyValues: body.values,\n });\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n throw error;\n }\n }\n\n // unwrap original error when fetch failed (for easier debugging):\n if (error instanceof TypeError && error.message === \"fetch failed\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cause = (error as any).cause;\n\n if (cause != null) {\n // Failed to connect to server:\n throw new ApiCallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues: body.values,\n isRetryable: true,\n });\n }\n }\n\n throw error;\n }\n};\n","import { nanoid as createId } from \"nanoid\";\nimport { FunctionEventSource } from \"./FunctionEventSource\";\nimport { FunctionCallOptions, FunctionOptions } from \"./FunctionOptions\";\nimport { getLogFormat } from \"./ModelFusionConfiguration\";\nimport { getFunctionObservers } from \"./ModelFusionConfiguration\";\nimport { AbortError } from \"./api/AbortError\";\nimport { getFunctionCallLogger } from \"./getFunctionCallLogger\";\nimport { getRun } from \"./getRun\";\nimport { startDurationMeasurement } from \"../util/DurationMeasurement\";\nimport { runSafe } from \"../util/runSafe\";\nimport { FunctionEvent } from \"./FunctionEvent\";\n\nexport async function executeFunctionCall<VALUE>({\n options,\n input,\n functionType,\n execute,\n inputPropertyName = \"input\",\n outputPropertyName = \"value\",\n}: {\n options?: FunctionOptions;\n input: unknown;\n functionType: FunctionEvent[\"functionType\"];\n execute: (options: FunctionCallOptions) => PromiseLike<VALUE>;\n inputPropertyName?: string;\n outputPropertyName?: string;\n}): Promise<VALUE> {\n const run = await getRun(options?.run);\n\n const eventSource = new FunctionEventSource({\n observers: [\n ...getFunctionCallLogger(options?.logging ?? getLogFormat()),\n ...getFunctionObservers(),\n ...(run?.functionObserver != null ? [run.functionObserver] : []),\n ...(options?.observers ?? []),\n ],\n errorHandler: run?.errorHandler,\n });\n\n const durationMeasurement = startDurationMeasurement();\n\n const startMetadata = {\n functionType,\n\n callId: `call-${createId()}`,\n parentCallId: options?.callId,\n runId: run?.runId,\n sessionId: run?.sessionId,\n userId: run?.userId,\n functionId: options?.functionId,\n\n [inputPropertyName]: input,\n\n timestamp: durationMeasurement.startDate,\n startTimestamp: durationMeasurement.startDate,\n };\n\n eventSource.notify({\n eventType: \"started\",\n ...startMetadata,\n } as FunctionEvent);\n\n const result = await runSafe(() =>\n execute({\n functionType,\n functionId: options?.functionId,\n callId: startMetadata.callId,\n logging: options?.logging,\n observers: options?.observers,\n run,\n })\n );\n\n const finishMetadata = {\n eventType: \"finished\" as const,\n ...startMetadata,\n finishTimestamp: new Date(),\n durationInMs: durationMeasurement.durationInMs,\n };\n\n if (!result.ok) {\n if (result.isAborted) {\n eventSource.notify({\n ...finishMetadata,\n eventType: \"finished\",\n result: {\n status: \"abort\",\n },\n } as FunctionEvent);\n throw new AbortError();\n }\n\n eventSource.notify({\n ...finishMetadata,\n eventType: \"finished\",\n result: {\n status: \"error\",\n error: result.error,\n },\n } as FunctionEvent);\n\n throw result.error;\n }\n\n eventSource.notify({\n ...finishMetadata,\n eventType: \"finished\",\n result: {\n status: \"success\",\n [outputPropertyName]: result.value,\n },\n } as FunctionEvent);\n\n return result.value;\n}\n","import { ErrorHandler } from \"../util/ErrorHandler\";\nimport { FunctionEvent } from \"./FunctionEvent\";\nimport { FunctionObserver } from \"./FunctionObserver\";\n\nexport class FunctionEventSource {\n readonly observers: FunctionObserver[];\n readonly errorHandler: ErrorHandler;\n\n constructor({\n observers,\n errorHandler,\n }: {\n observers: FunctionObserver[];\n errorHandler?: ErrorHandler;\n }) {\n this.observers = observers;\n this.errorHandler = errorHandler ?? ((error) => console.error(error));\n }\n\n notify(event: FunctionEvent) {\n for (const observer of this.observers) {\n try {\n observer.onFunctionEvent(event);\n } catch (error) {\n this.errorHandler(error);\n }\n }\n }\n}\n","import { FunctionObserver } from \"./FunctionObserver\";\nimport { LogFormat } from \"./LogFormat\";\n\nlet globalLogFormat: LogFormat = undefined;\nlet globalFunctionObservers: FunctionObserver[] = [];\n\nexport function setFunctionObservers(\n functionObservers: FunctionObserver[]\n): void {\n globalFunctionObservers = functionObservers;\n}\n\nexport function getFunctionObservers(): FunctionObserver[] {\n return globalFunctionObservers;\n}\n\nexport function setLogFormat(format: LogFormat): void {\n globalLogFormat = format;\n}\n\nexport function getLogFormat(): LogFormat {\n return globalLogFormat;\n}\n","export class AbortError extends Error {\n constructor(message = \"Aborted\") {\n super(message);\n }\n}\n","import { FunctionOptions } from \"./FunctionOptions\";\nimport { FunctionEvent } from \"./FunctionEvent\";\nimport { FunctionObserver } from \"./FunctionObserver\";\n\nexport function getFunctionCallLogger(\n logging: FunctionOptions[\"logging\"]\n): Array<FunctionObserver> {\n switch (logging) {\n case \"basic-text\":\n return [basicTextObserver];\n\n case \"detailed-object\":\n return [detailedObjectObserver];\n\n case \"detailed-json\":\n return [detailedJsonObserver];\n\n case \"off\":\n default:\n return [];\n }\n}\n\nconst basicTextObserver: FunctionObserver = {\n onFunctionEvent(event: FunctionEvent) {\n const text = `[${event.timestamp.toISOString()}] ${event.callId}${\n event.functionId != null ? ` (${event.functionId})` : \"\"\n } - ${event.functionType} ${event.eventType}`;\n\n // log based on event type:\n switch (event.eventType) {\n case \"started\": {\n console.log(text);\n break;\n }\n case \"finished\": {\n console.log(`${text} in ${event.durationInMs}ms`);\n break;\n }\n }\n },\n};\n\nconst detailedObjectObserver: FunctionObserver = {\n onFunctionEvent(event: FunctionEvent) {\n // Remove the \"response\" property from the result (if any):\n if (\n event.eventType === \"finished\" &&\n event.result != null &&\n \"rawResponse\" in event.result &&\n event.result?.rawResponse != null\n ) {\n event = {\n ...event,\n result: Object.fromEntries(\n Object.entries(event.result).filter(([k]) => k !== \"rawResponse\")\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any,\n };\n }\n\n // filter all hard-to-read properties from event for cleaner console output:\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function cleanObject(obj: any): any {\n if (obj instanceof Date || typeof obj === \"string\") {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => cleanObject(item));\n }\n\n if (obj !== null && typeof obj === \"object\") {\n return Object.fromEntries(\n Object.entries(obj)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .map(([k, v]) => {\n if (v === undefined) {\n return [k, undefined];\n } else if (v instanceof Uint8Array) {\n return [k, \"omitted<Uint8Array>\"];\n } else if (\n Array.isArray(v) &&\n v.length > 20 &&\n v.every((v) => typeof v === \"number\")\n ) {\n return [k, \"omitted<Array<number>>\"];\n } else {\n return [k, cleanObject(v)];\n }\n })\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .filter(([_, v]) => v !== undefined)\n );\n }\n return obj;\n }\n\n // Clean the event object\n const cleanedEvent = cleanObject(event);\n\n console.log(cleanedEvent);\n },\n};\n\nconst detailedJsonObserver: FunctionObserver = {\n onFunctionEvent(event: FunctionEvent) {\n // Remove the \"response\" property from the result (if any):\n if (\n event.eventType === \"finished\" &&\n event.result != null &&\n \"rawResponse\" in event.result &&\n event.result?.rawResponse != null\n ) {\n event = {\n ...event,\n result: Object.fromEntries(\n Object.entries(event.result).filter(([k]) => k !== \"rawResponse\")\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any,\n };\n }\n\n // filter all undefined properties from event for cleaner console output:\n event = Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(event).filter(([_, v]) => v !== undefined)\n ) as FunctionEvent;\n\n console.log(JSON.stringify(event));\n },\n};\n","export function detectRuntime() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const globalThisAny = globalThis as any;\n\n if (globalThisAny.EdgeRuntime) {\n return \"vercel-edge\";\n }\n\n if (globalThis.navigator?.userAgent === \"Cloudflare-Workers\") {\n return \"cloudflare-workers\";\n }\n\n if (globalThis.process?.release?.name === \"node\") {\n return \"node\";\n }\n\n if (globalThis.window) {\n return \"browser\";\n }\n\n return null;\n}\n","import { detectRuntime } from \"../util/detectRuntime\";\nimport { Run } from \"./Run\";\n\ninterface RunStorage {\n getStore: () => Run | undefined;\n run: (context: Run, callback: () => void) => void;\n}\n\nlet runStorage: RunStorage | undefined;\n\nasync function ensureLoaded() {\n if (detectRuntime() === \"node\" && !runStorage) {\n // Note: using \"async_hooks\" instead of \"node:async_hooks\" to avoid webpack fallback problems.\n const { AsyncLocalStorage } = await import(\"async_hooks\");\n runStorage = new AsyncLocalStorage<Run>();\n }\n\n return Promise.resolve();\n}\n\n/**\n * Returns the run stored in an AsyncLocalStorage if running in Node.js. It can be set with `withRun()`.\n */\nexport async function getRun(run?: Run): Promise<Run | undefined> {\n await ensureLoaded();\n return run ?? runStorage?.getStore();\n}\n\n/**\n * Stores the run in an AsyncLocalStorage if running in Node.js. It can be retrieved with `getRun()`.\n */\nexport async function withRun(\n run: Run,\n callback: (run: Run) => PromiseLike<void>\n) {\n await ensureLoaded();\n if (runStorage != null) {\n await runStorage.run(run, () => callback(run));\n } else {\n await callback(run);\n }\n}\n","export function startDurationMeasurement(): DurationMeasurement {\n // certain environments may not have the performance API:\n return globalThis.performance != null\n ? new PerformanceNowDurationMeasurement()\n : new DateDurationMeasurement();\n}\n\nexport interface DurationMeasurement {\n startEpochSeconds: number;\n startDate: Date;\n durationInMs: number;\n}\n\nclass PerformanceNowDurationMeasurement implements DurationMeasurement {\n private readonly startTime = globalThis.performance.now();\n\n get startEpochSeconds() {\n return Math.floor(\n (globalThis.performance.timeOrigin + this.startTime) / 1000\n );\n }\n\n get startDate() {\n return new Date(this.startEpochSeconds * 1000);\n }\n\n get durationInMs() {\n return Math.ceil(globalThis.performance.now() - this.startTime);\n }\n}\n\nclass DateDurationMeasurement implements DurationMeasurement {\n private readonly startTime = Date.now();\n\n get startEpochSeconds() {\n return Math.floor(this.startTime / 1000);\n }\n\n get startDate() {\n return new Date(this.startTime);\n }\n\n get durationInMs() {\n return Date.now() - this.startTime;\n }\n}\n","import { SafeResult } from \"./SafeResult\";\n\nexport const runSafe = async <OUTPUT>(\n f: () => PromiseLike<OUTPUT>\n): Promise<SafeResult<OUTPUT>> => {\n try {\n return { ok: true, value: await f() };\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n return { ok: false, isAborted: true };\n }\n\n return { ok: false, error };\n }\n};\n","import { ModelInformation } from \"./ModelInformation\";\nimport { Model, ModelSettings } from \"./Model\";\n\nexport abstract class AbstractModel<SETTINGS extends ModelSettings>\n implements Model<SETTINGS>\n{\n readonly settings: SETTINGS;\n\n constructor({ settings }: { settings: SETTINGS }) {\n this.settings = settings;\n }\n\n abstract readonly provider: string;\n abstract readonly modelName: string | null;\n\n // implemented as a separate accessor to remove all other properties from the model\n get modelInformation(): ModelInformation {\n return {\n provider: this.provider,\n modelName: this.modelName,\n };\n }\n\n abstract get settingsForEvent(): Partial<SETTINGS>;\n\n abstract withSettings(additionalSettings: Partial<SETTINGS>): this;\n}\n","export async function* convertReadableStreamToAsyncIterable<T>(\n stream: ReadableStream<T>\n): AsyncIterable<T> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return; // This will close the generator\n }\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n","import {\n EventSourceParser,\n ParsedEvent,\n createParser,\n} from \"eventsource-parser\";\n\n/**\n * A TransformStream that ingests a stream of strings and produces a stream of ParsedEvents.\n *\n * @example\n * ```\n * const eventStream =\n * response.body\n * .pipeThrough(new TextDecoderStream())\n * .pipeThrough(new EventSourceParserStream())\n * ```\n */\n// Copied from https://github.com/rexxars/eventsource-parser/blob/main/src/stream.ts to avoid issues with the commonjs build.\nexport class EventSourceParserStream extends TransformStream<\n string,\n ParsedEvent\n> {\n constructor() {\n let parser!: EventSourceParser;\n\n super({\n start(controller) {\n parser = createParser((event) => {\n if (event.type === \"event\") {\n controller.enqueue(event);\n }\n });\n },\n transform(chunk) {\n parser.feed(chunk);\n },\n });\n }\n}\n","import { ParsedEvent } from \"eventsource-parser\";\nimport { convertReadableStreamToAsyncIterable } from \"./convertReadableStreamToAsyncIterable\";\nimport { EventSourceParserStream } from \"./EventSourceParserStream\";\n\nexport async function parseEventSourceStream({\n stream,\n}: {\n stream: ReadableStream<Uint8Array>;\n}): Promise<AsyncIterable<ParsedEvent>> {\n const eventStream = stream\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream());\n\n return convertReadableStreamToAsyncIterable(eventStream);\n}\n"],"mappings":"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","names":["SecureJSON","v","createId"]}
1
+ {"version":3,"sources":["../../src/internal/index.ts","../../src/core/api/retryNever.ts","../../src/core/api/throttleOff.ts","../../src/core/api/callWithRetryAndThrottle.ts","../../src/core/api/LoadAPIKeyError.ts","../../src/core/api/loadApiKey.ts","../../src/util/format/UInt8Utils.ts","../../src/util/format/DataContent.ts","../../src/core/schema/parseJSON.ts","../../src/util/getErrorMessage.ts","../../src/core/schema/JSONParseError.ts","../../src/core/schema/TypeValidationError.ts","../../src/core/schema/validateTypes.ts","../../src/core/api/ApiCallError.ts","../../src/core/api/postToApi.ts","../../src/core/executeFunctionCall.ts","../../src/core/FunctionEventSource.ts","../../src/core/ModelFusionConfiguration.ts","../../src/core/api/AbortError.ts","../../src/core/getFunctionCallLogger.ts","../../src/util/detectRuntime.ts","../../src/core/getRun.ts","../../src/util/DurationMeasurement.ts","../../src/util/runSafe.ts","../../src/model-function/AbstractModel.ts","../../src/util/streaming/convertReadableStreamToAsyncIterable.ts","../../src/util/streaming/EventSourceParserStream.ts","../../src/util/streaming/parseEventSourceStream.ts"],"sourcesContent":["export * from \"../core/ExtensionFunctionEvent\";\nexport { callWithRetryAndThrottle } from \"../core/api/callWithRetryAndThrottle\";\nexport { loadApiKey } from \"../core/api/loadApiKey\";\nexport * from \"../core/api/postToApi\";\nexport { executeFunctionCall } from \"../core/executeFunctionCall\";\nexport { AbstractModel } from \"../model-function/AbstractModel\";\nexport { ErrorHandler } from \"../util/ErrorHandler\";\nexport { parseEventSourceStream } from \"../util/streaming/parseEventSourceStream\";\n","/**\n * The `retryNever` strategy never retries a failed API call.\n */\nexport const retryNever =\n () =>\n async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n f();\n","import { ThrottleFunction } from \"./ThrottleFunction\";\n\n/**\n * The `throttleOff` strategy does not limit parallel API calls.\n */\nexport const throttleOff = (): ThrottleFunction => (fn) => fn();\n","import { RetryFunction } from \"./RetryFunction\";\nimport { retryNever } from \"./retryNever\";\nimport { ThrottleFunction } from \"./ThrottleFunction\";\nimport { throttleOff } from \"./throttleOff\";\n\nexport const callWithRetryAndThrottle = async <OUTPUT>({\n retry = retryNever(),\n throttle = throttleOff(),\n call,\n}: {\n retry?: RetryFunction;\n throttle?: ThrottleFunction;\n call: () => PromiseLike<OUTPUT>;\n}): Promise<OUTPUT> => retry(async () => throttle(call));\n","export class LoadAPIKeyError extends Error {\n constructor({ message }: { message: string }) {\n super(message);\n\n this.name = \"LoadAPIKeyError\";\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n };\n }\n}\n","import { LoadAPIKeyError } from \"./LoadAPIKeyError\";\n\nexport function loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = \"apiKey\",\n description,\n}: {\n apiKey: string | undefined;\n environmentVariableName: string;\n apiKeyParameterName?: string;\n description: string;\n}): string {\n if (apiKey != null) {\n return apiKey;\n }\n\n if (typeof process === \"undefined\") {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter into the API configuration. Environment variables is not supported in this environment.`,\n });\n }\n\n apiKey = process.env[environmentVariableName];\n\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter into the API configuration or set it as an environment variable named ${environmentVariableName}.`,\n });\n }\n\n return apiKey;\n}\n","/*\n * MIT License\n *\n * Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// copied from: https://github.com/sindresorhus/uint8array-extras/blob/main/index.js\n\nexport function base64ToUint8Array(base64String: string) {\n return Uint8Array.from(\n globalThis.atob(base64UrlToBase64(base64String)),\n (x) => x.codePointAt(0)!\n );\n}\n\n// Reference: https://phuoc.ng/collection/this-vs-that/concat-vs-push/\nconst MAX_BLOCK_SIZE = 65_535;\n\nexport function uint8ArrayToBase64(array: Uint8Array) {\n let base64;\n\n if (array.length < MAX_BLOCK_SIZE) {\n // Required as `btoa` and `atob` don't properly support Unicode: https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n base64 = globalThis.btoa(String.fromCodePoint(...array));\n } else {\n base64 = \"\";\n for (const value of array) {\n base64 += String.fromCodePoint(value);\n }\n\n base64 = globalThis.btoa(base64);\n }\n\n return base64;\n}\n\nfunction base64UrlToBase64(base64url: string) {\n return base64url.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n}\n","import { base64ToUint8Array, uint8ArrayToBase64 } from \"./UInt8Utils\";\n\n/**\n * Data content. Can either be a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer.\n */\nexport type DataContent = string | Uint8Array | ArrayBuffer | Buffer;\n\nexport function convertDataContentToBase64String(content: DataContent): string {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (content instanceof ArrayBuffer) {\n return uint8ArrayToBase64(new Uint8Array(content));\n }\n\n return uint8ArrayToBase64(content);\n}\n\nexport function convertDataContentToUint8Array(\n content: DataContent\n): Uint8Array {\n if (content instanceof Uint8Array) {\n return content;\n }\n\n if (typeof content === \"string\") {\n return base64ToUint8Array(content);\n }\n\n if (content instanceof ArrayBuffer) {\n return new Uint8Array(content);\n }\n\n throw new Error(\n `Invalid data content. Expected a string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`\n );\n}\n","import SecureJSON from \"secure-json-parse\";\nimport { JSONParseError } from \"./JSONParseError\";\nimport { Schema } from \"./Schema\";\nimport { safeValidateTypes, validateTypes } from \"./validateTypes\";\nimport { TypeValidationError } from \"./TypeValidationError\";\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {unknown} - The parsed JSON object.\n */\nexport function parseJSON({ text }: { text: string }): unknown;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Schema<T>} schema - The schema to use for parsing the JSON.\n * @returns {T} - The parsed object.\n */\nexport function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema: Schema<T>;\n}): T;\nexport function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: Schema<T>;\n}): T {\n try {\n const value = SecureJSON.parse(text);\n\n if (schema == null) {\n return value;\n }\n\n return validateTypes({ value, schema });\n } catch (error) {\n if (\n error instanceof JSONParseError ||\n error instanceof TypeValidationError\n ) {\n throw error;\n }\n\n throw new JSONParseError({ text, cause: error });\n }\n}\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {object} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport function safeParseJSON({\n text,\n}: {\n text: string;\n}):\n | { success: true; value: unknown }\n | { success: false; error: JSONParseError | TypeValidationError };\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Schema<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema: Schema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: JSONParseError | TypeValidationError };\nexport function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: Schema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: JSONParseError | TypeValidationError } {\n try {\n const value = SecureJSON.parse(text);\n\n if (schema == null) {\n return {\n success: true,\n value: value as T,\n };\n }\n\n return safeValidateTypes({ value, schema });\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof JSONParseError\n ? error\n : new JSONParseError({ text, cause: error }),\n };\n }\n}\n","export function getErrorMessage(error: unknown | undefined) {\n if (error == null) {\n return \"unknown error\";\n }\n\n if (typeof error === \"string\") {\n return error;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n return JSON.stringify(error);\n}\n","import { getErrorMessage } from \"../../util/getErrorMessage\";\n\nexport class JSONParseError extends Error {\n // note: property order determines debugging output\n readonly text: string;\n readonly cause: unknown;\n\n constructor({ text, cause }: { text: string; cause: unknown }) {\n super(\n `JSON parsing failed: ` +\n `Text: ${text}.\\n` +\n `Error message: ${getErrorMessage(cause)}`\n );\n\n this.name = \"JSONParseError\";\n\n this.cause = cause;\n this.text = text;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n cause: this.cause,\n stack: this.stack,\n\n valueText: this.text,\n };\n }\n}\n","import { getErrorMessage } from \"../../util/getErrorMessage\";\n\nexport class TypeValidationError extends Error {\n readonly value: unknown;\n readonly cause: unknown;\n\n constructor({ value, cause }: { value: unknown; cause: unknown }) {\n super(\n `Type validation failed: ` +\n `Value: ${JSON.stringify(value)}.\\n` +\n `Error message: ${getErrorMessage(cause)}`\n );\n\n this.name = \"TypeValidationError\";\n\n this.cause = cause;\n this.value = value;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n cause: this.cause,\n stack: this.stack,\n\n value: this.value,\n };\n }\n}\n","import { Schema } from \"./Schema\";\nimport { TypeValidationError } from \"./TypeValidationError\";\n\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Schema<T>} options.schema - The schema to use for validating the JSON.\n * @returns {T} - The typed object.\n */\nexport function validateTypes<T>({\n value,\n schema,\n}: {\n value: unknown;\n schema: Schema<T>;\n}): T {\n try {\n const validationResult = schema.validate(value);\n\n if (!validationResult.success) {\n throw new TypeValidationError({\n value,\n cause: validationResult.error,\n });\n }\n\n return validationResult.value;\n } catch (error) {\n if (error instanceof TypeValidationError) {\n throw error;\n }\n\n throw new TypeValidationError({ value, cause: error });\n }\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Schema<T>} options.schema - The schema to use for validating the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport function safeValidateTypes<T>({\n value,\n schema,\n}: {\n value: unknown;\n schema: Schema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: TypeValidationError } {\n try {\n const validationResult = schema.validate(value);\n\n if (validationResult.success) {\n return validationResult;\n }\n\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: validationResult.error,\n }),\n };\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof TypeValidationError\n ? error\n : new TypeValidationError({ value, cause: error }),\n };\n }\n}\n","export class ApiCallError extends Error {\n readonly url: string;\n readonly requestBodyValues: unknown;\n readonly statusCode?: number;\n readonly responseBody?: string;\n readonly cause?: unknown;\n readonly isRetryable: boolean;\n readonly data?: unknown;\n\n constructor({\n message,\n url,\n requestBodyValues,\n statusCode,\n responseBody,\n cause,\n isRetryable = statusCode != null &&\n (statusCode === 429 || statusCode >= 500),\n data,\n }: {\n message: string;\n url: string;\n requestBodyValues: unknown;\n statusCode?: number;\n responseBody?: string;\n cause?: unknown;\n isRetryable?: boolean;\n data?: unknown;\n }) {\n super(message);\n\n this.name = \"ApiCallError\";\n\n this.url = url;\n this.requestBodyValues = requestBodyValues;\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n this.cause = cause;\n this.isRetryable = isRetryable;\n this.data = data;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n url: this.url,\n requestBodyValues: this.requestBodyValues,\n statusCode: this.statusCode,\n responseBody: this.responseBody,\n cause: this.cause,\n isRetryable: this.isRetryable,\n data: this.data,\n };\n }\n}\n","import { convertDataContentToUint8Array } from \"../../util/format/DataContent\";\nimport { Schema } from \"../schema/Schema\";\nimport { parseJSON, safeParseJSON } from \"../schema/parseJSON\";\nimport { ApiCallError } from \"./ApiCallError\";\n\nexport type ResponseHandler<T> = (options: {\n url: string;\n requestBodyValues: unknown;\n response: Response;\n}) => PromiseLike<T>;\n\nexport const createJsonErrorResponseHandler =\n <T>({\n errorSchema,\n errorToMessage,\n isRetryable,\n }: {\n errorSchema: Schema<T>;\n errorToMessage: (error: T) => string;\n isRetryable?: (response: Response, error?: T) => boolean;\n }): ResponseHandler<ApiCallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n // Some providers return an empty response body for some errors:\n if (responseBody.trim() === \"\") {\n return new ApiCallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n isRetryable: isRetryable?.(response),\n });\n }\n\n // resilient parsing in case the response is not JSON or does not match the schema:\n try {\n const parsedError = parseJSON({\n text: responseBody,\n schema: errorSchema,\n });\n\n return new ApiCallError({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable?.(response, parsedError),\n });\n } catch (parseError) {\n return new ApiCallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n isRetryable: isRetryable?.(response),\n });\n }\n };\n\nexport const createTextErrorResponseHandler =\n ({\n isRetryable,\n }: {\n isRetryable?: (response: Response) => boolean;\n } = {}): ResponseHandler<ApiCallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n return new ApiCallError({\n message: responseBody.trim() !== \"\" ? responseBody : response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n isRetryable: isRetryable?.(response),\n });\n };\n\nexport const createJsonResponseHandler =\n <T>(responseSchema: Schema<T>): ResponseHandler<T> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n const parsedResult = safeParseJSON({\n text: responseBody,\n schema: responseSchema,\n });\n\n if (!parsedResult.success) {\n throw new ApiCallError({\n message: \"Invalid JSON response\",\n cause: parsedResult.error,\n statusCode: response.status,\n responseBody,\n url,\n requestBodyValues,\n });\n }\n\n return parsedResult.value;\n };\n\nexport const createTextResponseHandler =\n (): ResponseHandler<string> =>\n async ({ response }) =>\n response.text();\n\nexport const createAudioMpegResponseHandler =\n (): ResponseHandler<Uint8Array> =>\n async ({ response, url, requestBodyValues }) => {\n if (response.headers.get(\"Content-Type\") !== \"audio/mpeg\") {\n throw new ApiCallError({\n message: \"Invalid Content-Type (must be audio/mpeg)\",\n statusCode: response.status,\n url,\n requestBodyValues,\n });\n }\n\n return convertDataContentToUint8Array(await response.arrayBuffer());\n };\n\nexport const postJsonToApi = async <T>({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n}: {\n url: string;\n headers?: Record<string, string>;\n body: unknown;\n failedResponseHandler: ResponseHandler<ApiCallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n}) =>\n postToApi({\n url,\n headers: {\n ...headers,\n \"Content-Type\": \"application/json\",\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n });\n\nexport const postToApi = async <T>({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n}: {\n url: string;\n headers?: Record<string, string>;\n body: {\n content: string | FormData | Uint8Array;\n values: unknown;\n };\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n}) => {\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: body.content,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n try {\n throw await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\" || error instanceof ApiCallError) {\n throw error;\n }\n }\n\n throw new ApiCallError({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n requestBodyValues: body.values,\n });\n }\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\" || error instanceof ApiCallError) {\n throw error;\n }\n }\n\n throw new ApiCallError({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n requestBodyValues: body.values,\n });\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n throw error;\n }\n }\n\n // unwrap original error when fetch failed (for easier debugging):\n if (error instanceof TypeError && error.message === \"fetch failed\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cause = (error as any).cause;\n\n if (cause != null) {\n // Failed to connect to server:\n throw new ApiCallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues: body.values,\n isRetryable: true,\n });\n }\n }\n\n throw error;\n }\n};\n","import { nanoid as createId } from \"nanoid\";\nimport { FunctionEventSource } from \"./FunctionEventSource\";\nimport { FunctionCallOptions, FunctionOptions } from \"./FunctionOptions\";\nimport { getLogFormat } from \"./ModelFusionConfiguration\";\nimport { getFunctionObservers } from \"./ModelFusionConfiguration\";\nimport { AbortError } from \"./api/AbortError\";\nimport { getFunctionCallLogger } from \"./getFunctionCallLogger\";\nimport { getRun } from \"./getRun\";\nimport { startDurationMeasurement } from \"../util/DurationMeasurement\";\nimport { runSafe } from \"../util/runSafe\";\nimport { FunctionEvent } from \"./FunctionEvent\";\n\nexport async function executeFunctionCall<VALUE>({\n options,\n input,\n functionType,\n execute,\n inputPropertyName = \"input\",\n outputPropertyName = \"value\",\n}: {\n options?: FunctionOptions;\n input: unknown;\n functionType: FunctionEvent[\"functionType\"];\n execute: (options: FunctionCallOptions) => PromiseLike<VALUE>;\n inputPropertyName?: string;\n outputPropertyName?: string;\n}): Promise<VALUE> {\n const run = await getRun(options?.run);\n\n const eventSource = new FunctionEventSource({\n observers: [\n ...getFunctionCallLogger(options?.logging ?? getLogFormat()),\n ...getFunctionObservers(),\n ...(run?.functionObserver != null ? [run.functionObserver] : []),\n ...(options?.observers ?? []),\n ],\n errorHandler: run?.errorHandler,\n });\n\n const durationMeasurement = startDurationMeasurement();\n\n const startMetadata = {\n functionType,\n\n callId: `call-${createId()}`,\n parentCallId: options?.callId,\n runId: run?.runId,\n sessionId: run?.sessionId,\n userId: run?.userId,\n functionId: options?.functionId,\n\n [inputPropertyName]: input,\n\n timestamp: durationMeasurement.startDate,\n startTimestamp: durationMeasurement.startDate,\n };\n\n eventSource.notify({\n eventType: \"started\",\n ...startMetadata,\n } as FunctionEvent);\n\n const result = await runSafe(() =>\n execute({\n functionType,\n functionId: options?.functionId,\n callId: startMetadata.callId,\n logging: options?.logging,\n observers: options?.observers,\n run,\n })\n );\n\n const finishMetadata = {\n eventType: \"finished\" as const,\n ...startMetadata,\n finishTimestamp: new Date(),\n durationInMs: durationMeasurement.durationInMs,\n };\n\n if (!result.ok) {\n if (result.isAborted) {\n eventSource.notify({\n ...finishMetadata,\n eventType: \"finished\",\n result: {\n status: \"abort\",\n },\n } as FunctionEvent);\n throw new AbortError();\n }\n\n eventSource.notify({\n ...finishMetadata,\n eventType: \"finished\",\n result: {\n status: \"error\",\n error: result.error,\n },\n } as FunctionEvent);\n\n throw result.error;\n }\n\n eventSource.notify({\n ...finishMetadata,\n eventType: \"finished\",\n result: {\n status: \"success\",\n [outputPropertyName]: result.value,\n },\n } as FunctionEvent);\n\n return result.value;\n}\n","import { ErrorHandler } from \"../util/ErrorHandler\";\nimport { FunctionEvent } from \"./FunctionEvent\";\nimport { FunctionObserver } from \"./FunctionObserver\";\n\nexport class FunctionEventSource {\n readonly observers: FunctionObserver[];\n readonly errorHandler: ErrorHandler;\n\n constructor({\n observers,\n errorHandler,\n }: {\n observers: FunctionObserver[];\n errorHandler?: ErrorHandler;\n }) {\n this.observers = observers;\n this.errorHandler = errorHandler ?? ((error) => console.error(error));\n }\n\n notify(event: FunctionEvent) {\n for (const observer of this.observers) {\n try {\n observer.onFunctionEvent(event);\n } catch (error) {\n this.errorHandler(error);\n }\n }\n }\n}\n","import { FunctionObserver } from \"./FunctionObserver\";\nimport { LogFormat } from \"./LogFormat\";\n\nlet globalLogFormat: LogFormat = undefined;\nlet globalFunctionObservers: FunctionObserver[] = [];\n\nexport function setFunctionObservers(\n functionObservers: FunctionObserver[]\n): void {\n globalFunctionObservers = functionObservers;\n}\n\nexport function getFunctionObservers(): FunctionObserver[] {\n return globalFunctionObservers;\n}\n\nexport function setLogFormat(format: LogFormat): void {\n globalLogFormat = format;\n}\n\nexport function getLogFormat(): LogFormat {\n return globalLogFormat;\n}\n","export class AbortError extends Error {\n constructor(message = \"Aborted\") {\n super(message);\n }\n}\n","import { FunctionOptions } from \"./FunctionOptions\";\nimport { FunctionEvent } from \"./FunctionEvent\";\nimport { FunctionObserver } from \"./FunctionObserver\";\n\nexport function getFunctionCallLogger(\n logging: FunctionOptions[\"logging\"]\n): Array<FunctionObserver> {\n switch (logging) {\n case \"basic-text\":\n return [basicTextObserver];\n\n case \"detailed-object\":\n return [detailedObjectObserver];\n\n case \"detailed-json\":\n return [detailedJsonObserver];\n\n case \"off\":\n default:\n return [];\n }\n}\n\nconst basicTextObserver: FunctionObserver = {\n onFunctionEvent(event: FunctionEvent) {\n const text = `[${event.timestamp.toISOString()}] ${event.callId}${\n event.functionId != null ? ` (${event.functionId})` : \"\"\n } - ${event.functionType} ${event.eventType}`;\n\n // log based on event type:\n switch (event.eventType) {\n case \"started\": {\n console.log(text);\n break;\n }\n case \"finished\": {\n console.log(`${text} in ${event.durationInMs}ms`);\n break;\n }\n }\n },\n};\n\nconst detailedObjectObserver: FunctionObserver = {\n onFunctionEvent(event: FunctionEvent) {\n // Remove the \"response\" property from the result (if any):\n if (\n event.eventType === \"finished\" &&\n event.result != null &&\n \"rawResponse\" in event.result &&\n event.result?.rawResponse != null\n ) {\n event = {\n ...event,\n result: Object.fromEntries(\n Object.entries(event.result).filter(([k]) => k !== \"rawResponse\")\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any,\n };\n }\n\n // filter all hard-to-read properties from event for cleaner console output:\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function cleanObject(obj: any): any {\n if (obj instanceof Date || typeof obj === \"string\") {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => cleanObject(item));\n }\n\n if (obj !== null && typeof obj === \"object\") {\n return Object.fromEntries(\n Object.entries(obj)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .map(([k, v]) => {\n if (v === undefined) {\n return [k, undefined];\n } else if (v instanceof Uint8Array) {\n return [k, \"omitted<Uint8Array>\"];\n } else if (\n Array.isArray(v) &&\n v.length > 20 &&\n v.every((v) => typeof v === \"number\")\n ) {\n return [k, \"omitted<Array<number>>\"];\n } else {\n return [k, cleanObject(v)];\n }\n })\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .filter(([_, v]) => v !== undefined)\n );\n }\n return obj;\n }\n\n // Clean the event object\n const cleanedEvent = cleanObject(event);\n\n console.log(cleanedEvent);\n },\n};\n\nconst detailedJsonObserver: FunctionObserver = {\n onFunctionEvent(event: FunctionEvent) {\n // Remove the \"response\" property from the result (if any):\n if (\n event.eventType === \"finished\" &&\n event.result != null &&\n \"rawResponse\" in event.result &&\n event.result?.rawResponse != null\n ) {\n event = {\n ...event,\n result: Object.fromEntries(\n Object.entries(event.result).filter(([k]) => k !== \"rawResponse\")\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any,\n };\n }\n\n // filter all undefined properties from event for cleaner console output:\n event = Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(event).filter(([_, v]) => v !== undefined)\n ) as FunctionEvent;\n\n console.log(JSON.stringify(event));\n },\n};\n","export function detectRuntime() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const globalThisAny = globalThis as any;\n\n if (globalThisAny.EdgeRuntime) {\n return \"vercel-edge\";\n }\n\n if (globalThis.navigator?.userAgent === \"Cloudflare-Workers\") {\n return \"cloudflare-workers\";\n }\n\n if (globalThis.process?.release?.name === \"node\") {\n return \"node\";\n }\n\n if (globalThis.window) {\n return \"browser\";\n }\n\n return null;\n}\n","import { detectRuntime } from \"../util/detectRuntime\";\nimport { Run } from \"./Run\";\n\ninterface RunStorage {\n getStore: () => Run | undefined;\n run: (context: Run, callback: () => void) => void;\n}\n\nlet runStorage: RunStorage | undefined;\n\nasync function ensureLoaded() {\n if (detectRuntime() === \"node\" && !runStorage) {\n // Note: using \"async_hooks\" instead of \"node:async_hooks\" to avoid webpack fallback problems.\n const { AsyncLocalStorage } = await import(\"async_hooks\");\n runStorage = new AsyncLocalStorage<Run>();\n }\n\n return Promise.resolve();\n}\n\n/**\n * Returns the run stored in an AsyncLocalStorage if running in Node.js. It can be set with `withRun()`.\n */\nexport async function getRun(run?: Run): Promise<Run | undefined> {\n await ensureLoaded();\n return run ?? runStorage?.getStore();\n}\n\n/**\n * Stores the run in an AsyncLocalStorage if running in Node.js. It can be retrieved with `getRun()`.\n */\nexport async function withRun(\n run: Run,\n callback: (run: Run) => PromiseLike<void>\n) {\n await ensureLoaded();\n if (runStorage != null) {\n await runStorage.run(run, () => callback(run));\n } else {\n await callback(run);\n }\n}\n","export function startDurationMeasurement(): DurationMeasurement {\n // certain environments may not have the performance API:\n return globalThis.performance != null\n ? new PerformanceNowDurationMeasurement()\n : new DateDurationMeasurement();\n}\n\nexport interface DurationMeasurement {\n startEpochSeconds: number;\n startDate: Date;\n durationInMs: number;\n}\n\nclass PerformanceNowDurationMeasurement implements DurationMeasurement {\n private readonly startTime = globalThis.performance.now();\n\n get startEpochSeconds() {\n return Math.floor(\n (globalThis.performance.timeOrigin + this.startTime) / 1000\n );\n }\n\n get startDate() {\n return new Date(this.startEpochSeconds * 1000);\n }\n\n get durationInMs() {\n return Math.ceil(globalThis.performance.now() - this.startTime);\n }\n}\n\nclass DateDurationMeasurement implements DurationMeasurement {\n private readonly startTime = Date.now();\n\n get startEpochSeconds() {\n return Math.floor(this.startTime / 1000);\n }\n\n get startDate() {\n return new Date(this.startTime);\n }\n\n get durationInMs() {\n return Date.now() - this.startTime;\n }\n}\n","import { SafeResult } from \"./SafeResult\";\n\nexport const runSafe = async <OUTPUT>(\n f: () => PromiseLike<OUTPUT>\n): Promise<SafeResult<OUTPUT>> => {\n try {\n return { ok: true, value: await f() };\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n return { ok: false, isAborted: true };\n }\n\n return { ok: false, error };\n }\n};\n","import { ModelInformation } from \"./ModelInformation\";\nimport { Model, ModelSettings } from \"./Model\";\n\nexport abstract class AbstractModel<SETTINGS extends ModelSettings>\n implements Model<SETTINGS>\n{\n readonly settings: SETTINGS;\n\n constructor({ settings }: { settings: SETTINGS }) {\n this.settings = settings;\n }\n\n abstract readonly provider: string;\n abstract readonly modelName: string | null;\n\n // implemented as a separate accessor to remove all other properties from the model\n get modelInformation(): ModelInformation {\n return {\n provider: this.provider,\n modelName: this.modelName,\n };\n }\n\n abstract get settingsForEvent(): Partial<SETTINGS>;\n\n abstract withSettings(additionalSettings: Partial<SETTINGS>): this;\n}\n","export async function* convertReadableStreamToAsyncIterable<T>(\n stream: ReadableStream<T>\n): AsyncIterable<T> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return; // This will close the generator\n }\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n","import {\n EventSourceParser,\n ParsedEvent,\n createParser,\n} from \"eventsource-parser\";\n\n/**\n * A TransformStream that ingests a stream of strings and produces a stream of ParsedEvents.\n *\n * @example\n * ```\n * const eventStream =\n * response.body\n * .pipeThrough(new TextDecoderStream())\n * .pipeThrough(new EventSourceParserStream())\n * ```\n */\n// Copied from https://github.com/rexxars/eventsource-parser/blob/main/src/stream.ts to avoid issues with the commonjs build.\nexport class EventSourceParserStream extends TransformStream<\n string,\n ParsedEvent\n> {\n constructor() {\n let parser!: EventSourceParser;\n\n super({\n start(controller) {\n parser = createParser((event) => {\n if (event.type === \"event\") {\n controller.enqueue(event);\n }\n });\n },\n transform(chunk) {\n parser.feed(chunk);\n },\n });\n }\n}\n","import { ParsedEvent } from \"eventsource-parser\";\nimport { convertReadableStreamToAsyncIterable } from \"./convertReadableStreamToAsyncIterable\";\nimport { EventSourceParserStream } from \"./EventSourceParserStream\";\n\nexport async function parseEventSourceStream({\n stream,\n}: {\n stream: ReadableStream<Uint8Array>;\n}): Promise<AsyncIterable<ParsedEvent>> {\n const eventStream = stream\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream());\n\n return convertReadableStreamToAsyncIterable(eventStream);\n}\n"],"mappings":"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","names":["SecureJSON","v","createId"]}
package/internal/index.js CHANGED
@@ -1,10 +1,3 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => {
4
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- return value;
6
- };
7
-
8
1
  // src/core/api/retryNever.ts
9
2
  var retryNever = () => async (f) => f();
10
3
 
@@ -102,14 +95,14 @@ function getErrorMessage(error) {
102
95
 
103
96
  // src/core/schema/JSONParseError.ts
104
97
  var JSONParseError = class extends Error {
98
+ // note: property order determines debugging output
99
+ text;
100
+ cause;
105
101
  constructor({ text, cause }) {
106
102
  super(
107
103
  `JSON parsing failed: Text: ${text}.
108
104
  Error message: ${getErrorMessage(cause)}`
109
105
  );
110
- // note: property order determines debugging output
111
- __publicField(this, "text");
112
- __publicField(this, "cause");
113
106
  this.name = "JSONParseError";
114
107
  this.cause = cause;
115
108
  this.text = text;
@@ -127,13 +120,13 @@ Error message: ${getErrorMessage(cause)}`
127
120
 
128
121
  // src/core/schema/TypeValidationError.ts
129
122
  var TypeValidationError = class extends Error {
123
+ value;
124
+ cause;
130
125
  constructor({ value, cause }) {
131
126
  super(
132
127
  `Type validation failed: Value: ${JSON.stringify(value)}.
133
128
  Error message: ${getErrorMessage(cause)}`
134
129
  );
135
- __publicField(this, "value");
136
- __publicField(this, "cause");
137
130
  this.name = "TypeValidationError";
138
131
  this.cause = cause;
139
132
  this.value = value;
@@ -235,6 +228,13 @@ function safeParseJSON({
235
228
 
236
229
  // src/core/api/ApiCallError.ts
237
230
  var ApiCallError = class extends Error {
231
+ url;
232
+ requestBodyValues;
233
+ statusCode;
234
+ responseBody;
235
+ cause;
236
+ isRetryable;
237
+ data;
238
238
  constructor({
239
239
  message,
240
240
  url,
@@ -246,13 +246,6 @@ var ApiCallError = class extends Error {
246
246
  data
247
247
  }) {
248
248
  super(message);
249
- __publicField(this, "url");
250
- __publicField(this, "requestBodyValues");
251
- __publicField(this, "statusCode");
252
- __publicField(this, "responseBody");
253
- __publicField(this, "cause");
254
- __publicField(this, "isRetryable");
255
- __publicField(this, "data");
256
249
  this.name = "ApiCallError";
257
250
  this.url = url;
258
251
  this.requestBodyValues = requestBodyValues;
@@ -467,12 +460,12 @@ import { nanoid as createId } from "nanoid";
467
460
 
468
461
  // src/core/FunctionEventSource.ts
469
462
  var FunctionEventSource = class {
463
+ observers;
464
+ errorHandler;
470
465
  constructor({
471
466
  observers,
472
467
  errorHandler
473
468
  }) {
474
- __publicField(this, "observers");
475
- __publicField(this, "errorHandler");
476
469
  this.observers = observers;
477
470
  this.errorHandler = errorHandler ?? ((error) => console.error(error));
478
471
  }
@@ -628,9 +621,7 @@ function startDurationMeasurement() {
628
621
  return globalThis.performance != null ? new PerformanceNowDurationMeasurement() : new DateDurationMeasurement();
629
622
  }
630
623
  var PerformanceNowDurationMeasurement = class {
631
- constructor() {
632
- __publicField(this, "startTime", globalThis.performance.now());
633
- }
624
+ startTime = globalThis.performance.now();
634
625
  get startEpochSeconds() {
635
626
  return Math.floor(
636
627
  (globalThis.performance.timeOrigin + this.startTime) / 1e3
@@ -644,9 +635,7 @@ var PerformanceNowDurationMeasurement = class {
644
635
  }
645
636
  };
646
637
  var DateDurationMeasurement = class {
647
- constructor() {
648
- __publicField(this, "startTime", Date.now());
649
- }
638
+ startTime = Date.now();
650
639
  get startEpochSeconds() {
651
640
  return Math.floor(this.startTime / 1e3);
652
641
  }
@@ -756,8 +745,8 @@ async function executeFunctionCall({
756
745
 
757
746
  // src/model-function/AbstractModel.ts
758
747
  var AbstractModel = class {
748
+ settings;
759
749
  constructor({ settings }) {
760
- __publicField(this, "settings");
761
750
  this.settings = settings;
762
751
  }
763
752
  // implemented as a separate accessor to remove all other properties from the model