ai 3.1.0-canary.3 → 3.1.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/README.md +1 -1
- package/dist/index.d.mts +982 -24
- package/dist/index.d.ts +982 -24
- package/dist/index.js +1748 -175
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1723 -174
- package/dist/index.mjs.map +1 -1
- package/package.json +14 -31
- package/prompts/dist/index.d.mts +13 -1
- package/prompts/dist/index.d.ts +13 -1
- package/prompts/dist/index.js +13 -0
- package/prompts/dist/index.js.map +1 -1
- package/prompts/dist/index.mjs +12 -0
- package/prompts/dist/index.mjs.map +1 -1
- package/react/dist/index.d.mts +27 -6
- package/react/dist/index.d.ts +31 -8
- package/react/dist/index.js +155 -141
- package/react/dist/index.js.map +1 -1
- package/react/dist/index.mjs +154 -141
- package/react/dist/index.mjs.map +1 -1
- package/react/dist/index.server.d.mts +4 -2
- package/react/dist/index.server.d.ts +4 -2
- package/react/dist/index.server.js.map +1 -1
- package/react/dist/index.server.mjs.map +1 -1
- package/rsc/dist/index.d.ts +385 -20
- package/rsc/dist/rsc-client.d.mts +1 -1
- package/rsc/dist/rsc-client.mjs +2 -0
- package/rsc/dist/rsc-client.mjs.map +1 -1
- package/rsc/dist/rsc-server.d.mts +367 -20
- package/rsc/dist/rsc-server.mjs +676 -35
- package/rsc/dist/rsc-server.mjs.map +1 -1
- package/rsc/dist/rsc-shared.d.mts +24 -9
- package/rsc/dist/rsc-shared.mjs +98 -4
- package/rsc/dist/rsc-shared.mjs.map +1 -1
- package/solid/dist/index.d.mts +7 -3
- package/solid/dist/index.d.ts +7 -3
- package/solid/dist/index.js +106 -107
- package/solid/dist/index.js.map +1 -1
- package/solid/dist/index.mjs +106 -107
- package/solid/dist/index.mjs.map +1 -1
- package/svelte/dist/index.d.mts +7 -3
- package/svelte/dist/index.d.ts +7 -3
- package/svelte/dist/index.js +109 -109
- package/svelte/dist/index.js.map +1 -1
- package/svelte/dist/index.mjs +109 -109
- package/svelte/dist/index.mjs.map +1 -1
- package/vue/dist/index.d.mts +7 -3
- package/vue/dist/index.d.ts +7 -3
- package/vue/dist/index.js +106 -107
- package/vue/dist/index.js.map +1 -1
- package/vue/dist/index.mjs +106 -107
- package/vue/dist/index.mjs.map +1 -1
- package/ai-model-specification/dist/index.d.mts +0 -606
- package/ai-model-specification/dist/index.d.ts +0 -606
- package/ai-model-specification/dist/index.js +0 -617
- package/ai-model-specification/dist/index.js.map +0 -1
- package/ai-model-specification/dist/index.mjs +0 -560
- package/ai-model-specification/dist/index.mjs.map +0 -1
- package/core/dist/index.d.mts +0 -590
- package/core/dist/index.d.ts +0 -590
- package/core/dist/index.js +0 -1528
- package/core/dist/index.js.map +0 -1
- package/core/dist/index.mjs +0 -1481
- package/core/dist/index.mjs.map +0 -1
- package/provider/dist/index.d.mts +0 -429
- package/provider/dist/index.d.ts +0 -429
- package/provider/dist/index.js +0 -1194
- package/provider/dist/index.js.map +0 -1
- package/provider/dist/index.mjs +0 -1158
- package/provider/dist/index.mjs.map +0 -1
package/core/dist/index.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../index.ts","../generate-object/generate-object.ts","../../ai-model-specification/errors/ai-invalid-argument-error.ts","../../ai-model-specification/util/get-error-message.ts","../../ai-model-specification/errors/json-parse-error.ts","../../ai-model-specification/errors/no-object-generated-error.ts","../../ai-model-specification/errors/retry-error.ts","../../ai-model-specification/errors/type-validation-error.ts","../../ai-model-specification/util/parse-json.ts","../../ai-model-specification/util/validate-types.ts","../../ai-model-specification/util/uint8-utils.ts","../generate-text/token-usage.ts","../prompt/data-content.ts","../prompt/convert-to-language-model-prompt.ts","../prompt/get-input-format.ts","../prompt/validate-call-settings.ts","../util/delay.ts","../util/retry-with-exponential-backoff.ts","../generate-object/inject-json-schema-into-system.ts","../generate-object/stream-object.ts","../util/is-deep-equal-data.ts","../util/parse-partial-json.ts","../util/fix-json.ts","../generate-text/generate-text.ts","../generate-text/tool-call.ts","../generate-text/stream-text.ts","../generate-text/run-tools-transformation.ts","../tool/tool.ts"],"sourcesContent":["export * from './generate-object';\nexport * from './generate-text';\nexport * from './prompt';\nexport * from './tool';\n","import { z } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport {\n LanguageModelV1,\n LanguageModelV1FinishReason,\n NoTextGeneratedError,\n safeParseJSON,\n} from '../../ai-model-specification';\nimport { TokenUsage, calculateTokenUsage } from '../generate-text/token-usage';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { getInputFormat } from '../prompt/get-input-format';\nimport { Prompt } from '../prompt/prompt';\nimport { validateCallSettings } from '../prompt/validate-call-settings';\nimport { retryWithExponentialBackoff } from '../util/retry-with-exponential-backoff';\nimport { injectJsonSchemaIntoSystem } from './inject-json-schema-into-system';\n\n/**\n * Generate a structured, typed object using a language model.\n */\nexport async function generateObject<T>({\n model,\n schema,\n mode,\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n ...settings\n}: CallSettings &\n Prompt & {\n model: LanguageModelV1;\n schema: z.Schema<T>;\n mode?: 'auto' | 'json' | 'tool' | 'grammar';\n }): Promise<GenerateObjectResult<T>> {\n const retry = retryWithExponentialBackoff({ maxRetries });\n const jsonSchema = zodToJsonSchema(schema);\n\n // use the default provider mode when the mode is set to 'auto' or unspecified\n if (mode === 'auto' || mode == null) {\n mode = model.defaultObjectGenerationMode;\n }\n\n let result: string;\n let finishReason: LanguageModelV1FinishReason;\n let usage: Parameters<typeof calculateTokenUsage>[0];\n\n switch (mode) {\n case 'json': {\n const generateResult = await retry(() =>\n model.doGenerate({\n mode: { type: 'object-json' },\n ...validateCallSettings(settings),\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system: injectJsonSchemaIntoSystem({ system, schema: jsonSchema }),\n prompt,\n messages,\n }),\n abortSignal,\n }),\n );\n\n if (generateResult.text === undefined) {\n throw new NoTextGeneratedError();\n }\n\n result = generateResult.text;\n finishReason = generateResult.finishReason;\n usage = generateResult.usage;\n\n break;\n }\n\n case 'grammar': {\n const generateResult = await retry(() =>\n model.doGenerate({\n mode: { type: 'object-grammar', schema: jsonSchema },\n ...settings,\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system: injectJsonSchemaIntoSystem({ system, schema: jsonSchema }),\n prompt,\n messages,\n }),\n abortSignal,\n }),\n );\n\n if (generateResult.text === undefined) {\n throw new NoTextGeneratedError();\n }\n\n result = generateResult.text;\n finishReason = generateResult.finishReason;\n usage = generateResult.usage;\n\n break;\n }\n\n case 'tool': {\n const generateResult = await retry(() =>\n model.doGenerate({\n mode: {\n type: 'object-tool',\n tool: {\n type: 'function',\n name: 'json',\n description: 'Respond with a JSON object.',\n parameters: jsonSchema,\n },\n },\n ...settings,\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({ system, prompt, messages }),\n abortSignal,\n }),\n );\n\n const functionArgs = generateResult.toolCalls?.[0]?.args;\n\n if (functionArgs === undefined) {\n throw new NoTextGeneratedError();\n }\n\n result = functionArgs;\n finishReason = generateResult.finishReason;\n usage = generateResult.usage;\n\n break;\n }\n\n case undefined: {\n throw new Error('Model does not have a default object generation mode.');\n }\n\n default: {\n const _exhaustiveCheck: never = mode;\n throw new Error(`Unsupported mode: ${_exhaustiveCheck}`);\n }\n }\n\n const parseResult = safeParseJSON({ text: result, schema });\n\n if (!parseResult.success) {\n throw parseResult.error;\n }\n\n return new GenerateObjectResult({\n object: parseResult.value,\n finishReason,\n usage: calculateTokenUsage(usage),\n });\n}\n\nexport class GenerateObjectResult<T> {\n readonly object: T;\n readonly finishReason: LanguageModelV1FinishReason;\n readonly usage: TokenUsage;\n\n constructor(options: {\n object: T;\n finishReason: LanguageModelV1FinishReason;\n usage: TokenUsage;\n }) {\n this.object = options.object;\n this.finishReason = options.finishReason;\n this.usage = options.usage;\n }\n}\n","export class AI_InvalidArgumentError extends Error {\n readonly parameter: string;\n readonly value: unknown;\n // readonly learnMore =\n // 'https://sdk.vercel.com/docs/ai/errors/ai_invalid_argument_error';\n\n constructor({\n parameter,\n value,\n message,\n }: {\n parameter: string;\n value: unknown;\n message: string;\n }) {\n super(`Invalid argument for parameter ${parameter}: ${message}`);\n\n this.name = 'AI_InvalidArgumentError';\n\n this.parameter = parameter;\n this.value = value;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n\n parameter: this.parameter,\n value: this.value,\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/get-error-message';\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","export class NoTextGeneratedError extends Error {\n readonly cause: unknown;\n\n constructor() {\n super(`No text generated.`);\n\n this.name = 'NoTextGeneratedError';\n }\n\n toJSON() {\n return {\n name: this.name,\n cause: this.cause,\n message: this.message,\n stack: this.stack,\n };\n }\n}\n","export type RetryErrorReason =\n | 'maxRetriesExceeded'\n | 'errorNotRetryable'\n | 'abort';\n\nexport class RetryError extends Error {\n // note: property order determines debugging output\n readonly reason: RetryErrorReason;\n readonly lastError: unknown;\n readonly errors: Array<unknown>;\n\n constructor({\n message,\n reason,\n errors,\n }: {\n message: string;\n reason: RetryErrorReason;\n errors: Array<unknown>;\n }) {\n super(message);\n\n this.name = 'RetryError';\n this.reason = reason;\n this.errors = errors;\n\n // separate our last error to make debugging via log easier:\n this.lastError = errors[errors.length - 1];\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n reason: this.reason,\n lastError: this.lastError,\n errors: this.errors,\n };\n }\n}\n","import { getErrorMessage } from '../util/get-error-message';\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 SecureJSON from 'secure-json-parse';\nimport { ZodSchema } from 'zod';\nimport { JSONParseError } from '../errors/json-parse-error';\nimport { TypeValidationError } from '../errors/type-validation-error';\nimport { safeValidateTypes, validateTypes } from './validate-types';\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: ZodSchema<T>;\n}): T;\nexport function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: ZodSchema<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: ZodSchema<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?: ZodSchema<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\nexport function isParseableJson(input: string): boolean {\n try {\n SecureJSON.parse(input);\n return true;\n } catch {\n return false;\n }\n}\n","import { ZodSchema } from 'zod';\nimport { TypeValidationError } from '../errors/type-validation-error';\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: ZodSchema<T>;\n}): T {\n try {\n return schema.parse(value);\n } catch (error) {\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: ZodSchema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: TypeValidationError } {\n try {\n const validationResult = schema.safeParse(value);\n\n if (validationResult.success) {\n return {\n success: true,\n value: validationResult.data,\n };\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 function convertBase64ToUint8Array(base64String: string) {\n const base64Url = base64String.replace(/-/g, '+').replace(/_/g, '/');\n const latin1string = globalThis.atob(base64Url);\n return Uint8Array.from(latin1string, byte => byte.codePointAt(0)!);\n}\n\nexport function convertUint8ArrayToBase64(array: Uint8Array): string {\n let latin1string = '';\n for (const value of array) {\n latin1string += String.fromCodePoint(value);\n }\n return globalThis.btoa(latin1string);\n}\n","export type TokenUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n};\n\nexport function calculateTokenUsage(usage: {\n promptTokens: number;\n completionTokens: number;\n}): TokenUsage {\n return {\n promptTokens: usage.promptTokens,\n completionTokens: usage.completionTokens,\n totalTokens: usage.promptTokens + usage.completionTokens,\n };\n}\n","import {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n} from '../../ai-model-specification';\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 convertUint8ArrayToBase64(new Uint8Array(content));\n }\n\n return convertUint8ArrayToBase64(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 convertBase64ToUint8Array(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 {\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1Prompt,\n LanguageModelV1TextPart,\n} from '../../ai-model-specification';\nimport { convertDataContentToUint8Array } from './data-content';\nimport { Prompt } from './prompt';\n\nexport function convertToLanguageModelPrompt({\n system,\n prompt,\n messages,\n}: Prompt): LanguageModelV1Prompt {\n if (prompt == null && messages == null) {\n throw new Error('prompt or messages must be defined');\n }\n\n if (prompt != null && messages != null) {\n throw new Error('prompt and messages cannot be defined at the same time');\n }\n\n const languageModelMessages: LanguageModelV1Prompt = [];\n\n if (system != null) {\n languageModelMessages.push({ role: 'system', content: system });\n }\n\n if (typeof prompt === 'string') {\n languageModelMessages.push({\n role: 'user',\n content: [{ type: 'text', text: prompt }],\n });\n } else {\n messages = messages!; // it's not null because of the check above\n\n languageModelMessages.push(\n ...messages.map((message): LanguageModelV1Message => {\n switch (message.role) {\n case 'user': {\n if (typeof message.content === 'string') {\n return {\n role: 'user',\n content: [{ type: 'text', text: message.content }],\n };\n }\n\n return {\n role: 'user',\n content: message.content.map(\n (part): LanguageModelV1TextPart | LanguageModelV1ImagePart => {\n switch (part.type) {\n case 'text': {\n return part;\n }\n\n case 'image': {\n return {\n type: 'image',\n image:\n part.image instanceof URL\n ? part.image\n : convertDataContentToUint8Array(part.image),\n mimeType: part.mimeType,\n };\n }\n }\n },\n ),\n };\n }\n\n case 'assistant': {\n if (typeof message.content === 'string') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text: message.content }],\n };\n }\n\n return { role: 'assistant', content: message.content };\n }\n\n case 'tool': {\n return message;\n }\n }\n }),\n );\n }\n\n return languageModelMessages;\n}\n","import { Prompt } from './prompt';\n\nexport function getInputFormat({\n prompt,\n messages,\n}: Prompt): 'prompt' | 'messages' {\n if (prompt == null && messages == null) {\n throw new Error('prompt or messages must be defined');\n }\n\n if (prompt != null && messages != null) {\n throw new Error('prompt and messages cannot be defined at the same time');\n }\n\n return prompt != null ? 'prompt' : 'messages';\n}\n","import { CallSettings } from './call-settings';\nimport { AI_InvalidArgumentError } from '../../ai-model-specification';\n\nexport function validateCallSettings(settings: CallSettings): CallSettings {\n if (settings.maxTokens != null) {\n if (!Number.isInteger(settings.maxTokens)) {\n throw new AI_InvalidArgumentError({\n parameter: 'maxTokens',\n value: settings.maxTokens,\n message: 'maxTokens must be an integer',\n });\n }\n\n if (settings.maxTokens < 1) {\n throw new AI_InvalidArgumentError({\n parameter: 'maxTokens',\n value: settings.maxTokens,\n message: 'maxTokens must be >= 1',\n });\n }\n }\n\n if (settings.temperature != null) {\n if (typeof settings.temperature !== 'number') {\n throw new AI_InvalidArgumentError({\n parameter: 'temperature',\n value: settings.temperature,\n message: 'temperature must be a number',\n });\n }\n\n if (settings.temperature < 0 || settings.temperature > 1) {\n throw new AI_InvalidArgumentError({\n parameter: 'temperature',\n value: settings.temperature,\n message: 'temperature must be between 0 and 1 (inclusive)',\n });\n }\n }\n\n if (settings.topP != null) {\n if (typeof settings.topP !== 'number') {\n throw new AI_InvalidArgumentError({\n parameter: 'topP',\n value: settings.topP,\n message: 'topP must be a number',\n });\n }\n\n if (settings.topP < 0 || settings.topP > 1) {\n throw new AI_InvalidArgumentError({\n parameter: 'topP',\n value: settings.topP,\n message: 'topP must be between 0 and 1 (inclusive)',\n });\n }\n }\n\n if (settings.presencePenalty != null) {\n if (typeof settings.presencePenalty !== 'number') {\n throw new AI_InvalidArgumentError({\n parameter: 'presencePenalty',\n value: settings.presencePenalty,\n message: 'presencePenalty must be a number',\n });\n }\n\n if (settings.presencePenalty < -1 || settings.presencePenalty > 1) {\n throw new AI_InvalidArgumentError({\n parameter: 'presencePenalty',\n value: settings.presencePenalty,\n message: 'presencePenalty must be between -1 and 1 (inclusive)',\n });\n }\n }\n\n if (settings.frequencyPenalty != null) {\n if (typeof settings.frequencyPenalty !== 'number') {\n throw new AI_InvalidArgumentError({\n parameter: 'frequencyPenalty',\n value: settings.frequencyPenalty,\n message: 'frequencyPenalty must be a number',\n });\n }\n\n if (settings.frequencyPenalty < -1 || settings.frequencyPenalty > 1) {\n throw new AI_InvalidArgumentError({\n parameter: 'frequencyPenalty',\n value: settings.frequencyPenalty,\n message: 'frequencyPenalty must be between -1 and 1 (inclusive)',\n });\n }\n }\n\n if (settings.seed != null) {\n if (!Number.isInteger(settings.seed)) {\n throw new AI_InvalidArgumentError({\n parameter: 'seed',\n value: settings.seed,\n message: 'seed must be an integer',\n });\n }\n }\n\n return settings;\n}\n","export async function delay(delayInMs: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, delayInMs));\n}\n","import { RetryError, getErrorMessage } from '../../ai-model-specification';\nimport { delay } from './delay';\n\nexport type RetryFunction = <OUTPUT>(\n fn: () => PromiseLike<OUTPUT>,\n) => PromiseLike<OUTPUT>;\n\n/**\n * The `retryWithExponentialBackoff` strategy retries a failed API call with an exponential backoff.\n * You can configure the maximum number of retries, the initial delay, and the backoff factor.\n */\nexport const retryWithExponentialBackoff =\n ({\n maxRetries = 2,\n initialDelayInMs = 2000,\n backoffFactor = 2,\n } = {}): RetryFunction =>\n async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n _retryWithExponentialBackoff(f, {\n maxRetries,\n delayInMs: initialDelayInMs,\n backoffFactor,\n });\n\nasync function _retryWithExponentialBackoff<OUTPUT>(\n f: () => PromiseLike<OUTPUT>,\n {\n maxRetries,\n delayInMs,\n backoffFactor,\n }: { maxRetries: number; delayInMs: number; backoffFactor: number },\n errors: unknown[] = [],\n): Promise<OUTPUT> {\n try {\n return await f();\n } catch (error) {\n if (maxRetries === 0) {\n throw error; // don't wrap the error when retries are disabled\n }\n\n const errorMessage = getErrorMessage(error);\n const newErrors = [...errors, error];\n const tryNumber = newErrors.length;\n\n if (tryNumber > maxRetries) {\n throw new RetryError({\n message: `Failed after ${tryNumber} tries. Last error: ${errorMessage}`,\n reason: 'maxRetriesExceeded',\n errors: newErrors,\n });\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw error;\n }\n\n if (\n // deal with bundling duplication by using names\n error.name === 'ApiCallError' &&\n (error as any).isRetryable === true &&\n tryNumber <= maxRetries\n ) {\n await delay(delayInMs);\n return _retryWithExponentialBackoff(\n f,\n { maxRetries, delayInMs: backoffFactor * delayInMs, backoffFactor },\n newErrors,\n );\n }\n }\n\n throw new RetryError({\n message: `Failed after ${tryNumber} tries with non-retryable error: '${errorMessage}'`,\n reason: 'errorNotRetryable',\n errors: newErrors,\n });\n }\n}\n","const DEFAULT_SCHEMA_PREFIX = 'JSON schema:';\nconst DEFAULT_SCHEMA_SUFFIX =\n 'You MUST answer with a JSON object that matches the JSON schema above.';\n\nexport function injectJsonSchemaIntoSystem({\n system,\n schema,\n schemaPrefix = DEFAULT_SCHEMA_PREFIX,\n schemaSuffix = DEFAULT_SCHEMA_SUFFIX,\n}: {\n system?: string;\n schema: Record<string, unknown>;\n schemaPrefix?: string;\n schemaSuffix?: string;\n}): string {\n return [\n system,\n system != null ? '' : null, // add a newline if system is not null\n schemaPrefix,\n JSON.stringify(schema),\n schemaSuffix,\n ]\n .filter(line => line != null)\n .join('\\n');\n}\n","import { PartialDeep } from 'type-fest';\nimport { z } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport {\n LanguageModelV1,\n LanguageModelV1StreamPart,\n} from '../../ai-model-specification/index';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { getInputFormat } from '../prompt/get-input-format';\nimport { Prompt } from '../prompt/prompt';\nimport { validateCallSettings } from '../prompt/validate-call-settings';\nimport { isDeepEqualData } from '../util/is-deep-equal-data';\nimport { parsePartialJson } from '../util/parse-partial-json';\nimport { retryWithExponentialBackoff } from '../util/retry-with-exponential-backoff';\nimport { injectJsonSchemaIntoSystem } from './inject-json-schema-into-system';\n\n/**\n * Stream an object as a partial object stream.\n */\nexport async function streamObject<T>({\n model,\n schema,\n mode,\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n ...settings\n}: CallSettings &\n Prompt & {\n model: LanguageModelV1;\n schema: z.Schema<T>;\n mode?: 'auto' | 'json' | 'tool' | 'grammar';\n }): Promise<StreamObjectResult<T>> {\n const retry = retryWithExponentialBackoff({ maxRetries });\n const jsonSchema = zodToJsonSchema(schema);\n\n let modelStream: ReadableStream<string | ErrorStreamPart>;\n\n // use the default provider mode when the mode is set to 'auto' or unspecified\n if (mode === 'auto' || mode == null) {\n mode = model.defaultObjectGenerationMode;\n }\n\n switch (mode) {\n case 'json': {\n const { stream, warnings } = await retry(() =>\n model.doStream({\n mode: { type: 'object-json' },\n ...validateCallSettings(settings),\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system: injectJsonSchemaIntoSystem({ system, schema: jsonSchema }),\n prompt,\n messages,\n }),\n abortSignal,\n }),\n );\n\n // TODO remove duplication\n modelStream = stream.pipeThrough(\n new TransformStream<\n LanguageModelV1StreamPart,\n string | ErrorStreamPart\n >({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'text-delta':\n controller.enqueue(chunk.textDelta);\n break;\n case 'error':\n controller.enqueue(chunk);\n break;\n }\n },\n }),\n );\n\n break;\n }\n\n case 'grammar': {\n const { stream, warnings } = await retry(() =>\n model.doStream({\n mode: { type: 'object-grammar', schema: jsonSchema },\n ...settings,\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system: injectJsonSchemaIntoSystem({ system, schema: jsonSchema }),\n prompt,\n messages,\n }),\n abortSignal,\n }),\n );\n\n // TODO remove duplication\n modelStream = stream.pipeThrough(\n new TransformStream<\n LanguageModelV1StreamPart,\n string | ErrorStreamPart\n >({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'text-delta':\n controller.enqueue(chunk.textDelta);\n break;\n case 'error':\n controller.enqueue(chunk);\n break;\n }\n },\n }),\n );\n\n break;\n }\n\n case 'tool': {\n const { stream, warnings } = await retry(() =>\n model.doStream({\n mode: {\n type: 'object-tool',\n tool: {\n type: 'function',\n name: 'json',\n description: 'Respond with a JSON object.',\n parameters: jsonSchema,\n },\n },\n ...settings,\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({ system, prompt, messages }),\n abortSignal,\n }),\n );\n\n modelStream = stream.pipeThrough(\n new TransformStream<\n LanguageModelV1StreamPart,\n string | ErrorStreamPart\n >({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'tool-call-delta':\n controller.enqueue(chunk.argsTextDelta);\n break;\n case 'error':\n controller.enqueue(chunk);\n break;\n }\n },\n }),\n );\n\n break;\n }\n\n case undefined: {\n throw new Error('Model does not have a default object generation mode.');\n }\n\n default: {\n const _exhaustiveCheck: never = mode;\n throw new Error(`Unsupported mode: ${_exhaustiveCheck}`);\n }\n }\n\n return new StreamObjectResult(modelStream);\n}\n\nexport class StreamObjectResult<T> {\n readonly objectStream: AsyncIterable<\n PartialDeep<T, { recurseIntoArrays: true }>\n >;\n\n constructor(modelStream: ReadableStream<string | ErrorStreamPart>) {\n let accumulatedText = '';\n let latestObject: PartialDeep<T, { recurseIntoArrays: true }> | undefined =\n undefined;\n\n this.objectStream = {\n [Symbol.asyncIterator](): AsyncIterator<\n PartialDeep<T, { recurseIntoArrays: true }>\n > {\n const reader = modelStream.getReader();\n return {\n next: async () => {\n // loops until a text delta is found or the stream is finished:\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n return { value: null, done: true };\n }\n\n if (typeof value === 'string') {\n accumulatedText += value;\n\n const currentObject = parsePartialJson(\n accumulatedText,\n ) as PartialDeep<T, { recurseIntoArrays: true }>;\n\n if (!isDeepEqualData(latestObject, currentObject)) {\n latestObject = currentObject;\n\n return { value: currentObject, done: false };\n }\n }\n\n // TODO handle error parts\n }\n },\n };\n },\n };\n }\n}\n\nexport type ErrorStreamPart = { type: 'error'; error: unknown };\n","/**\n * Performs a deep-equal comparison of two parsed JSON objects.\n *\n * @param {any} obj1 - The first object to compare.\n * @param {any} obj2 - The second object to compare.\n * @returns {boolean} - Returns true if the two objects are deeply equal, false otherwise.\n */\nexport function isDeepEqualData(obj1: any, obj2: any): boolean {\n // Check for strict equality first\n if (obj1 === obj2) return true;\n\n // Check if either is null or undefined\n if (obj1 == null || obj2 == null) return false;\n\n // Check if both are objects\n if (typeof obj1 !== 'object' && typeof obj2 !== 'object')\n return obj1 === obj2;\n\n // If they are not strictly equal, they both need to be Objects\n if (obj1.constructor !== obj2.constructor) return false;\n\n // Special handling for Date objects\n if (obj1 instanceof Date && obj2 instanceof Date) {\n return obj1.getTime() === obj2.getTime();\n }\n\n // Handle arrays: compare length and then perform a recursive deep comparison on each item\n if (Array.isArray(obj1)) {\n if (obj1.length !== obj2.length) return false;\n for (let i = 0; i < obj1.length; i++) {\n if (!isDeepEqualData(obj1[i], obj2[i])) return false;\n }\n return true; // All array elements matched\n }\n\n // Compare the set of keys in each object\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n\n // Check each key-value pair recursively\n for (const key of keys1) {\n if (!keys2.includes(key)) return false;\n if (!isDeepEqualData(obj1[key], obj2[key])) return false;\n }\n\n return true; // All keys and values matched\n}\n","import SecureJSON from 'secure-json-parse';\nimport { fixJson } from './fix-json';\n\nexport function parsePartialJson(\n jsonText: string | undefined,\n): unknown | undefined {\n if (jsonText == null) {\n return undefined;\n }\n\n try {\n // first attempt a regular JSON parse:\n return SecureJSON.parse(jsonText);\n } catch (ignored) {\n try {\n // then try to fix the partial JSON and parse it:\n const fixedJsonText = fixJson(jsonText);\n return SecureJSON.parse(fixedJsonText);\n } catch (ignored) {\n // ignored\n }\n }\n\n return undefined;\n}\n","type State =\n | 'ROOT'\n | 'FINISH'\n | 'INSIDE_STRING'\n | 'INSIDE_STRING_ESCAPE'\n | 'INSIDE_LITERAL'\n | 'INSIDE_NUMBER'\n | 'INSIDE_OBJECT_START'\n | 'INSIDE_OBJECT_KEY'\n | 'INSIDE_OBJECT_AFTER_KEY'\n | 'INSIDE_OBJECT_BEFORE_VALUE'\n | 'INSIDE_OBJECT_AFTER_VALUE'\n | 'INSIDE_OBJECT_AFTER_COMMA'\n | 'INSIDE_ARRAY_START'\n | 'INSIDE_ARRAY_AFTER_VALUE'\n | 'INSIDE_ARRAY_AFTER_COMMA';\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n const stack: State[] = ['ROOT'];\n let lastValidIndex = -1;\n let literalStart: number | null = null;\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_STRING');\n break;\n }\n\n case 'f':\n case 't':\n case 'n': {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_LITERAL');\n break;\n }\n\n case '-': {\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_NUMBER');\n break;\n }\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_NUMBER');\n break;\n }\n\n case '{': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_OBJECT_START');\n break;\n }\n\n case '[': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_ARRAY_START');\n break;\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_OBJECT_AFTER_COMMA');\n break;\n }\n case '}': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_ARRAY_AFTER_COMMA');\n break;\n }\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n const currentState = stack[stack.length - 1];\n\n switch (currentState) {\n case 'ROOT':\n processValueStart(char, i, 'FINISH');\n break;\n\n case 'INSIDE_OBJECT_START': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_KEY');\n break;\n }\n case '}': {\n stack.pop();\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_COMMA': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_KEY');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_KEY': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_AFTER_KEY');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_KEY': {\n switch (char) {\n case ':': {\n stack.pop();\n stack.push('INSIDE_OBJECT_BEFORE_VALUE');\n\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_BEFORE_VALUE': {\n processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE');\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_VALUE': {\n processAfterObjectValue(char, i);\n break;\n }\n\n case 'INSIDE_STRING': {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n\n case '\\\\': {\n stack.push('INSIDE_STRING_ESCAPE');\n break;\n }\n\n default: {\n lastValidIndex = i;\n }\n }\n\n break;\n }\n\n case 'INSIDE_ARRAY_START': {\n switch (char) {\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_ARRAY_AFTER_VALUE': {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_ARRAY_AFTER_COMMA');\n break;\n }\n\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n break;\n }\n }\n\n break;\n }\n\n case 'INSIDE_ARRAY_AFTER_COMMA': {\n processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n break;\n }\n\n case 'INSIDE_STRING_ESCAPE': {\n stack.pop();\n lastValidIndex = i;\n\n break;\n }\n\n case 'INSIDE_NUMBER': {\n switch (char) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n lastValidIndex = i;\n break;\n }\n\n case 'e':\n case 'E':\n case '-':\n case '.': {\n break;\n }\n\n case ',': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case '}': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case ']': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n\n break;\n }\n\n default: {\n stack.pop();\n break;\n }\n }\n\n break;\n }\n\n case 'INSIDE_LITERAL': {\n const partialLiteral = input.substring(literalStart!, i + 1);\n\n if (\n !'false'.startsWith(partialLiteral) &&\n !'true'.startsWith(partialLiteral) &&\n !'null'.startsWith(partialLiteral)\n ) {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n\n break;\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1);\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n\n switch (state) {\n case 'INSIDE_STRING': {\n result += '\"';\n break;\n }\n\n case 'INSIDE_OBJECT_KEY':\n case 'INSIDE_OBJECT_AFTER_KEY':\n case 'INSIDE_OBJECT_AFTER_COMMA':\n case 'INSIDE_OBJECT_START':\n case 'INSIDE_OBJECT_BEFORE_VALUE':\n case 'INSIDE_OBJECT_AFTER_VALUE': {\n result += '}';\n break;\n }\n\n case 'INSIDE_ARRAY_START':\n case 'INSIDE_ARRAY_AFTER_COMMA':\n case 'INSIDE_ARRAY_AFTER_VALUE': {\n result += ']';\n break;\n }\n\n case 'INSIDE_LITERAL': {\n const partialLiteral = input.substring(literalStart!, input.length);\n\n if ('true'.startsWith(partialLiteral)) {\n result += 'true'.slice(partialLiteral.length);\n } else if ('false'.startsWith(partialLiteral)) {\n result += 'false'.slice(partialLiteral.length);\n } else if ('null'.startsWith(partialLiteral)) {\n result += 'null'.slice(partialLiteral.length);\n }\n }\n }\n }\n\n return result;\n}\n","import zodToJsonSchema from 'zod-to-json-schema';\nimport {\n LanguageModelV1,\n LanguageModelV1FinishReason,\n} from '../../ai-model-specification';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { getInputFormat } from '../prompt/get-input-format';\nimport { Prompt } from '../prompt/prompt';\nimport { validateCallSettings } from '../prompt/validate-call-settings';\nimport { Tool } from '../tool/tool';\nimport { retryWithExponentialBackoff } from '../util/retry-with-exponential-backoff';\nimport { TokenUsage, calculateTokenUsage } from './token-usage';\nimport { ToToolCallArray, parseToolCall } from './tool-call';\nimport { ToToolResultArray } from './tool-result';\n\n/**\n * Generate a text and call tools using a language model.\n */\nexport async function generateText<TOOLS extends Record<string, Tool>>({\n model,\n tools,\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n ...settings\n}: CallSettings &\n Prompt & {\n model: LanguageModelV1;\n tools?: TOOLS;\n }): Promise<GenerateTextResult<TOOLS>> {\n const retry = retryWithExponentialBackoff({ maxRetries });\n const modelResponse = await retry(() =>\n model.doGenerate({\n mode: {\n type: 'regular',\n tools:\n tools == null\n ? undefined\n : Object.entries(tools).map(([name, tool]) => ({\n type: 'function',\n name,\n description: tool.description,\n parameters: zodToJsonSchema(tool.parameters),\n })),\n },\n ...validateCallSettings(settings),\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system,\n prompt,\n messages,\n }),\n abortSignal,\n }),\n );\n\n // parse tool calls:\n const toolCalls: ToToolCallArray<TOOLS> = [];\n for (const modelToolCall of modelResponse.toolCalls ?? []) {\n toolCalls.push(parseToolCall({ toolCall: modelToolCall, tools }));\n }\n\n // execute tools:\n const toolResults =\n tools == null ? [] : await executeTools({ toolCalls, tools });\n\n return new GenerateTextResult({\n // Always return a string so that the caller doesn't have to check for undefined.\n // If they need to check if the model did not return any text,\n // they can check the length of the string:\n text: modelResponse.text ?? '',\n toolCalls,\n toolResults,\n finishReason: modelResponse.finishReason,\n usage: calculateTokenUsage(modelResponse.usage),\n });\n}\n\nasync function executeTools<TOOLS extends Record<string, Tool>>({\n toolCalls,\n tools,\n}: {\n toolCalls: ToToolCallArray<TOOLS>;\n tools: TOOLS;\n}): Promise<ToToolResultArray<TOOLS>> {\n const toolResults = await Promise.all(\n toolCalls.map(async toolCall => {\n const tool = tools[toolCall.toolName];\n\n if (tool?.execute == null) {\n return undefined;\n }\n\n const result = await tool.execute(toolCall.args);\n\n return {\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n result,\n } as ToToolResultArray<TOOLS>[number];\n }),\n );\n\n return toolResults.filter(\n (result): result is NonNullable<typeof result> => result != null,\n );\n}\n\nexport class GenerateTextResult<TOOLS extends Record<string, Tool>> {\n readonly text: string;\n readonly toolCalls: ToToolCallArray<TOOLS>;\n readonly toolResults: ToToolResultArray<TOOLS>;\n readonly finishReason: LanguageModelV1FinishReason;\n readonly usage: TokenUsage;\n\n constructor(options: {\n text: string;\n toolCalls: ToToolCallArray<TOOLS>;\n toolResults: ToToolResultArray<TOOLS>;\n finishReason: LanguageModelV1FinishReason;\n usage: TokenUsage;\n }) {\n this.text = options.text;\n this.toolCalls = options.toolCalls;\n this.toolResults = options.toolResults;\n this.finishReason = options.finishReason;\n this.usage = options.usage;\n }\n}\n","import { ValueOf } from 'type-fest';\nimport { z } from 'zod';\nimport {\n LanguageModelV1FunctionToolCall,\n safeParseJSON,\n} from '../../ai-model-specification/index';\nimport { Tool } from '../tool';\n\nexport interface ToolCall<NAME extends string, ARGS> {\n toolCallId: string;\n toolName: NAME;\n args: ARGS;\n}\n\n// transforms the tools into a tool call union\nexport type ToToolCall<TOOLS extends Record<string, Tool>> = ValueOf<{\n [NAME in keyof TOOLS]: {\n toolCallId: string;\n toolName: NAME & string;\n args: z.infer<TOOLS[NAME]['parameters']>;\n };\n}>;\n\nexport type ToToolCallArray<TOOLS extends Record<string, Tool>> = Array<\n ToToolCall<TOOLS>\n>;\n\nexport function parseToolCall<TOOLS extends Record<string, Tool>>({\n toolCall,\n tools,\n}: {\n toolCall: LanguageModelV1FunctionToolCall;\n tools?: TOOLS;\n}): ToToolCall<TOOLS> {\n const toolName = toolCall.toolName as keyof TOOLS & string;\n\n if (tools == null) {\n // TODO add dedicated error to list of errors (NoSuchToolError)\n throw new Error(`Tool not found: ${toolName}`);\n }\n\n const tool = tools[toolName];\n\n // TODO add dedicated error to list of errors (NoSuchToolError)\n if (tool == null) {\n throw new Error(`Tool not found: ${toolName}`);\n }\n\n const parseResult = safeParseJSON({\n text: toolCall.args,\n schema: tool.parameters,\n });\n\n // TODO dedicate tool call error (InvalidToolArgumentsError)\n if (parseResult.success === false) {\n throw new Error(\n `Tool call ${toolName} has invalid arguments: ${parseResult.error}`,\n );\n }\n\n // TODO should have typesafe tool call arguments\n const toolArgs = parseResult.value;\n\n return {\n toolCallId: toolCall.toolCallId,\n toolName,\n args: toolArgs,\n };\n}\n","import zodToJsonSchema from 'zod-to-json-schema';\nimport { LanguageModelV1 } from '../../ai-model-specification/index';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { getInputFormat } from '../prompt/get-input-format';\nimport { Prompt } from '../prompt/prompt';\nimport { validateCallSettings } from '../prompt/validate-call-settings';\nimport { Tool } from '../tool';\nimport { retryWithExponentialBackoff } from '../util/retry-with-exponential-backoff';\nimport { runToolsTransformation } from './run-tools-transformation';\nimport { ToToolCall } from './tool-call';\nimport { ToToolResult } from './tool-result';\n\n/**\n * Stream text generated by a language model.\n */\nexport async function streamText<TOOLS extends Record<string, Tool>>({\n model,\n tools,\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n ...settings\n}: CallSettings &\n Prompt & {\n model: LanguageModelV1;\n tools?: TOOLS;\n }): Promise<StreamTextResult<TOOLS>> {\n const retry = retryWithExponentialBackoff({ maxRetries });\n const { stream, warnings } = await retry(() =>\n model.doStream({\n mode: {\n type: 'regular',\n tools:\n tools == null\n ? undefined\n : Object.entries(tools).map(([name, tool]) => ({\n type: 'function',\n name,\n description: tool.description,\n parameters: zodToJsonSchema(tool.parameters),\n })),\n },\n ...validateCallSettings(settings),\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system,\n prompt,\n messages,\n }),\n abortSignal,\n }),\n );\n\n const toolStream = runToolsTransformation({\n tools,\n generatorStream: stream,\n });\n\n return new StreamTextResult(toolStream);\n}\n\nexport type TextStreamPart<TOOLS extends Record<string, Tool>> =\n | {\n type: 'text-delta';\n textDelta: string;\n }\n | ({\n type: 'tool-call';\n } & ToToolCall<TOOLS>)\n | {\n type: 'error';\n error: unknown;\n }\n | ({\n type: 'tool-result';\n } & ToToolResult<TOOLS>);\n\nexport class StreamTextResult<TOOLS extends Record<string, Tool>> {\n private readonly rootStream: ReadableStream<TextStreamPart<TOOLS>>;\n\n readonly textStream: AsyncIterable<string>;\n\n readonly fullStream: AsyncIterable<TextStreamPart<TOOLS>>;\n\n constructor(stream: ReadableStream<TextStreamPart<TOOLS>>) {\n this.rootStream = stream;\n\n this.textStream = {\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const reader = stream.getReader();\n return {\n next: async () => {\n // loops until a text delta is found or the stream is finished:\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n return { value: null, done: true };\n }\n\n if (value.type === 'text-delta') {\n // do not stream empty text deltas:\n if (value.textDelta.length > 0) {\n return { value: value.textDelta, done: false };\n }\n }\n\n if (value.type === 'error') {\n // TODO log / store errors\n console.error('Error:', value.error);\n }\n }\n },\n };\n },\n };\n\n this.fullStream = {\n [Symbol.asyncIterator](): AsyncIterator<TextStreamPart<TOOLS>> {\n const reader = stream.getReader();\n return {\n next: async () => {\n // loops until a valid delta is found or the stream is finished:\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n return { value: null, done: true };\n }\n\n if (value.type === 'text-delta') {\n // do not stream empty text deltas:\n if (value.textDelta.length > 0) {\n return { value, done: false };\n }\n } else {\n return { value, done: false };\n }\n }\n },\n };\n },\n };\n }\n}\n","import { nanoid } from 'nanoid';\nimport { LanguageModelV1StreamPart } from '../../ai-model-specification/index';\nimport { Tool } from '../tool';\nimport { TextStreamPart } from './stream-text';\nimport { parseToolCall } from './tool-call';\n\nexport function runToolsTransformation<TOOLS extends Record<string, Tool>>({\n tools,\n generatorStream,\n}: {\n tools?: TOOLS;\n generatorStream: ReadableStream<LanguageModelV1StreamPart>;\n}): ReadableStream<TextStreamPart<TOOLS>> {\n let canClose = false;\n const outstandingToolCalls = new Set<string>();\n\n // tool results stream\n let toolResultsStreamController: ReadableStreamDefaultController<\n TextStreamPart<TOOLS>\n > | null = null;\n const toolResultsStream = new ReadableStream<TextStreamPart<TOOLS>>({\n start(controller) {\n toolResultsStreamController = controller;\n },\n });\n\n // forward stream\n const forwardStream = new TransformStream<\n LanguageModelV1StreamPart,\n TextStreamPart<TOOLS>\n >({\n transform(\n chunk: LanguageModelV1StreamPart,\n controller: TransformStreamDefaultController<TextStreamPart<TOOLS>>,\n ) {\n const chunkType = chunk.type;\n\n switch (chunkType) {\n // forward:\n case 'text-delta':\n case 'error': {\n controller.enqueue(chunk);\n break;\n }\n\n // process\n case 'tool-call': {\n const toolName = chunk.toolName as keyof TOOLS & string;\n\n if (tools == null) {\n // TODO add dedicated error to list of errors (NoSuchToolError)\n toolResultsStreamController!.enqueue({\n type: 'error',\n error: `Tool ${chunk.toolName} not found (no tools provided)`,\n });\n break;\n }\n\n const tool = tools[toolName];\n\n if (tool == null) {\n // TODO add dedicated error to list of errors (NoSuchToolError)\n toolResultsStreamController!.enqueue({\n type: 'error',\n error: `Tool ${chunk.toolName} not found`,\n });\n\n break;\n }\n\n // TODO try catch or safe parse\n const toolCall = parseToolCall({\n toolCall: chunk,\n tools,\n });\n\n // TODO dedicate tool call error (InvalidToolArgumentsError)\n // toolResultsStreamController!.enqueue({\n // type: 'error',\n // error: `Tool call ${toolName} has invalid arguments: ${parseResult.error}`,\n // });\n\n controller.enqueue({\n type: 'tool-call',\n ...toolCall,\n });\n\n if (tool.execute != null) {\n const toolExecutionId = nanoid(); // use our own id to guarantee uniqueness\n outstandingToolCalls.add(toolExecutionId);\n\n // Note: we don't await the tool execution here, because we want to process\n // the next chunk as soon as possible. This is important for the case where\n // the tool execution takes a long time.\n tool.execute(toolCall.args).then(\n (result: any) => {\n toolResultsStreamController!.enqueue({\n type: 'tool-result',\n ...toolCall,\n result,\n } as any);\n\n outstandingToolCalls.delete(toolExecutionId);\n\n // close the tool results controller if no more outstanding tool calls\n if (canClose && outstandingToolCalls.size === 0) {\n toolResultsStreamController!.close();\n }\n },\n (error: any) => {\n toolResultsStreamController!.enqueue({\n type: 'error',\n error,\n });\n\n outstandingToolCalls.delete(toolExecutionId);\n\n // close the tool results controller if no more outstanding tool calls\n if (canClose && outstandingToolCalls.size === 0) {\n toolResultsStreamController!.close();\n }\n },\n );\n }\n\n break;\n }\n\n // ignore\n case 'finish-metadata':\n case 'tool-call-delta': {\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = chunkType;\n throw new Error(`Unhandled chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n\n flush() {\n canClose = true;\n\n if (outstandingToolCalls.size === 0) {\n toolResultsStreamController!.close();\n }\n },\n });\n\n // combine the generator stream and the tool results stream\n return new ReadableStream<TextStreamPart<TOOLS>>({\n async start(controller) {\n generatorStream.pipeThrough(forwardStream).pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n close() {\n // the generator stream controller is automatically closed when it's consumed\n },\n }),\n );\n\n toolResultsStream.pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n close() {\n controller.close();\n },\n }),\n );\n },\n });\n}\n","import { z } from 'zod';\n\n/**\n * A tool contains the description and the schema of the input that the tool expects.\n * This enables the language model to generate the input.\n *\n * The tool can also contain an optional execute function for the actual execution function of the tool.\n */\nexport interface Tool<PARAMETERS extends z.ZodTypeAny = any, RESULT = any> {\n /**\n * A optional description of what the tool does. Will be used by the language model to decide whether to use the tool.\n */\n description?: string;\n\n /**\n * The schema of the input that the tool expects. The language model will use this to generate the input.\n * Use descriptions to make the input understandable for the language model.\n */\n parameters: PARAMETERS;\n\n /**\n * An optional execute function for the actual execution function of the tool.\n * If not provided, the tool will not be executed automatically.\n */\n execute?: (args: z.infer<PARAMETERS>) => PromiseLike<RESULT>;\n}\n\n/**\n * Helper function for inferring the execute args of a tool.\n */\n// Note: special type inference is needed for the execute function args to make sure they are inferred correctly.\nexport function tool<PARAMETERS extends z.ZodTypeAny, RESULT>(\n tool: Tool<PARAMETERS, RESULT> & {\n execute: (args: z.infer<PARAMETERS>) => PromiseLike<RESULT>;\n },\n): Tool<PARAMETERS, RESULT> & {\n execute: (args: z.infer<PARAMETERS>) => PromiseLike<RESULT>;\n};\nexport function tool<PARAMETERS extends z.ZodTypeAny, RESULT>(\n tool: Tool<PARAMETERS, RESULT> & {\n execute?: undefined;\n },\n): Tool<PARAMETERS, RESULT> & {\n execute: undefined;\n};\nexport function tool<PARAMETERS extends z.ZodTypeAny, RESULT = any>(\n tool: Tool<PARAMETERS, RESULT>,\n): Tool<PARAMETERS, RESULT> {\n return tool;\n}\n"],"mappings":"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","names":["SecureJSON","zodToJsonSchema","import_zod_to_json_schema","import_secure_json_parse","SecureJSON","ignored","zodToJsonSchema","import_zod_to_json_schema","tool","tool","zodToJsonSchema","import_zod_to_json_schema","tool","tool","zodToJsonSchema","tool"]}
|