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.
- package/index.cjs +306 -252
- package/index.cjs.map +1 -1
- package/index.d.cts +39 -11
- package/index.d.ts +39 -11
- package/index.js +305 -252
- package/index.js.map +1 -1
- package/internal/index.cjs +17 -26
- package/internal/index.cjs.map +1 -1
- package/internal/index.js +17 -28
- package/internal/index.js.map +1 -1
- package/package.json +5 -5
- package/CHANGELOG.md +0 -2301
- package/README.md +0 -697
package/internal/index.cjs
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
package/internal/index.cjs.map
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|