ai 3.0.8 → 3.1.0-canary.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.
Files changed (37) hide show
  1. package/README.md +10 -4
  2. package/core/dist/index.d.mts +480 -0
  3. package/core/dist/index.d.ts +480 -0
  4. package/core/dist/index.js +1528 -0
  5. package/core/dist/index.js.map +1 -0
  6. package/core/dist/index.mjs +1479 -0
  7. package/core/dist/index.mjs.map +1 -0
  8. package/package.json +20 -3
  9. package/provider/dist/chunk-3DTRVHCT.mjs +5046 -0
  10. package/provider/dist/chunk-3DTRVHCT.mjs.map +1 -0
  11. package/provider/dist/chunk-4OUDS3CP.mjs +30 -0
  12. package/provider/dist/chunk-4OUDS3CP.mjs.map +1 -0
  13. package/provider/dist/chunk-5IYCPJBV.mjs +56 -0
  14. package/provider/dist/chunk-5IYCPJBV.mjs.map +1 -0
  15. package/provider/dist/chunk-VB2TCVQ4.mjs +6746 -0
  16. package/provider/dist/chunk-VB2TCVQ4.mjs.map +1 -0
  17. package/provider/dist/chunk-VYIXVZ6L.mjs +317 -0
  18. package/provider/dist/chunk-VYIXVZ6L.mjs.map +1 -0
  19. package/provider/dist/chunk-WTOUHN6A.mjs +2251 -0
  20. package/provider/dist/chunk-WTOUHN6A.mjs.map +1 -0
  21. package/provider/dist/client-22WAAXR7.mjs +10 -0
  22. package/provider/dist/client-22WAAXR7.mjs.map +1 -0
  23. package/provider/dist/fileFromPath-23RINPB2.mjs +115 -0
  24. package/provider/dist/fileFromPath-23RINPB2.mjs.map +1 -0
  25. package/provider/dist/index.d.mts +387 -0
  26. package/provider/dist/index.d.ts +387 -0
  27. package/provider/dist/index.js +26487 -0
  28. package/provider/dist/index.js.map +1 -0
  29. package/provider/dist/index.mjs +8087 -0
  30. package/provider/dist/index.mjs.map +1 -0
  31. package/provider/dist/lib-BZMMM4HX.mjs +20 -0
  32. package/provider/dist/lib-BZMMM4HX.mjs.map +1 -0
  33. package/provider/dist/openai-3YL4AWLI.mjs +3451 -0
  34. package/provider/dist/openai-3YL4AWLI.mjs.map +1 -0
  35. package/rsc/dist/index.d.ts +4 -3
  36. package/rsc/dist/rsc-server.d.mts +3 -2
  37. package/rsc/dist/rsc-server.mjs.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../index.ts","../util/uint8-utils.ts","../prompt/data-content.ts","../prompt/convert-to-language-model-prompt.ts","../prompt/get-input-format.ts","../schema/parse-json.ts","../language-model/errors/get-error-message.ts","../language-model/errors/json-parse-error.ts","../language-model/errors/type-validation-error.ts","../schema/validate-types.ts","../schema/zod-schema.ts","../generate-object/inject-json-schema-into-system.ts","../language-model/errors/no-object-generated-error.ts","../generate-object/generate-object.ts","../util/is-deep-equal-data.ts","../util/parse-partial-json.ts","../util/fix-json.ts","../generate-object/stream-object.ts","../generate-text/generate-text.ts","../generate-text/tool-call.ts","../generate-text/stream-text.ts","../generate-text/run-tools-transformation.ts","../../shared/stream-parts.ts","../../shared/utils.ts","../generate-text/stream-text-http-response.ts","../tool/tool.ts","../language-model/errors/unsupported-functionality-error.ts"],"sourcesContent":["export * from './language-model/index';\nexport * from './generate-object';\nexport * from './generate-text';\nexport * from './language-model';\nexport * from './prompt';\nexport * from './tool';\nexport * from './language-model/errors/unsupported-functionality-error';\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","import {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n} from '../util/uint8-utils';\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 '../language-model';\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: 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 SecureJSON from 'secure-json-parse';\nimport { JSONParseError } from '../language-model/errors/json-parse-error';\nimport { Schema } from './schema';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport { TypeValidationError } from '../language-model/errors/type-validation-error';\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 './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","import { getErrorMessage } from './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 { Schema } from './schema';\nimport { TypeValidationError } from '../language-model/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: 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","import { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport { Schema } from './schema';\n\nexport function zodSchema<OBJECT>(zodSchema: z.Schema<OBJECT>) {\n return new ZodSchema(zodSchema);\n}\n\nexport class ZodSchema<OBJECT> implements Schema<OBJECT> {\n readonly zodSchema: z.Schema<OBJECT>;\n\n constructor(zodSchema: z.Schema<OBJECT>) {\n this.zodSchema = zodSchema;\n }\n\n validate(\n value: unknown,\n ): { success: true; value: OBJECT } | { success: false; error: unknown } {\n const result = this.zodSchema.safeParse(value);\n\n return result.success\n ? { success: true, value: result.data }\n : { success: false, error: result.error };\n }\n\n getJsonSchema() {\n return zodToJsonSchema(this.zodSchema) as Record<string, unknown>;\n }\n\n /**\n * Use only for typing purposes. The value is always `undefined`.\n */\n readonly _type!: OBJECT;\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","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","import { z } from 'zod';\nimport { LanguageModel } from '../language-model';\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 { safeParseJSON } from '../schema/parse-json';\nimport { ZodSchema } from '../schema/zod-schema';\nimport { injectJsonSchemaIntoSystem } from './inject-json-schema-into-system';\nimport { NoTextGeneratedError } from '../language-model/errors/no-object-generated-error';\n\n/**\n * Generate a structured, typed object using a language model.\n */\nexport async function generateObject<T>({\n model,\n schema: zodSchema,\n mode,\n system,\n prompt,\n messages,\n ...settings\n}: CallSettings &\n Prompt & {\n model: LanguageModel;\n schema: z.Schema<T>;\n mode?: 'json' | 'tool' | 'grammar';\n }): Promise<GenerateObjectResult<T>> {\n const schema = new ZodSchema(zodSchema);\n const jsonSchema = schema.getJsonSchema();\n\n let result: string;\n\n mode = mode ?? model.defaultObjectGenerationMode;\n switch (mode) {\n case 'json': {\n const generateResult = await model.doGenerate({\n mode: { type: 'object-json' },\n ...settings,\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system: injectJsonSchemaIntoSystem({ system, schema: jsonSchema }),\n prompt,\n messages,\n }),\n });\n\n if (generateResult.text === undefined) {\n throw new NoTextGeneratedError();\n }\n\n result = generateResult.text;\n\n break;\n }\n\n case 'grammar': {\n const generateResult = await 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 });\n\n if (generateResult.text === undefined) {\n throw new NoTextGeneratedError();\n }\n\n result = generateResult.text;\n\n break;\n }\n\n case 'tool': {\n const generateResult = await 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 });\n\n const functionArgs = generateResult.toolCalls?.[0]?.args;\n\n if (functionArgs === undefined) {\n throw new NoTextGeneratedError();\n }\n\n result = functionArgs;\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 });\n}\n\nexport class GenerateObjectResult<T> {\n readonly object: T;\n\n constructor(options: { object: T }) {\n this.object = options.object;\n }\n}\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 { PartialDeep } from 'type-fest';\nimport { z } from 'zod';\nimport {\n ErrorStreamPart,\n LanguageModel,\n LanguageModelStreamPart,\n} from '../language-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { Prompt } from '../prompt/prompt';\nimport { ZodSchema } from '../schema/zod-schema';\nimport { isDeepEqualData } from '../util/is-deep-equal-data';\nimport { parsePartialJson } from '../util/parse-partial-json';\nimport { injectJsonSchemaIntoSystem } from './inject-json-schema-into-system';\nimport { getInputFormat } from '../prompt/get-input-format';\n\n/**\n * Stream an object as a partial object stream.\n */\nexport async function streamObject<T>({\n model,\n schema: zodSchema,\n mode,\n system,\n prompt,\n messages,\n ...settings\n}: CallSettings &\n Prompt & {\n model: LanguageModel;\n schema: z.Schema<T>;\n mode?: 'json' | 'tool' | 'grammar';\n }): Promise<StreamObjectResult<T>> {\n const schema = new ZodSchema(zodSchema);\n const jsonSchema = schema.getJsonSchema();\n\n let modelStream: ReadableStream<string | ErrorStreamPart>;\n\n mode = mode ?? model.defaultObjectGenerationMode;\n switch (mode) {\n case 'json': {\n const { stream, warnings } = await model.doStream({\n mode: { type: 'object-json' },\n ...settings,\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system: injectJsonSchemaIntoSystem({ system, schema: jsonSchema }),\n prompt,\n messages,\n }),\n });\n\n // TODO remove duplication\n modelStream = stream.pipeThrough(\n new TransformStream<LanguageModelStreamPart, string | ErrorStreamPart>({\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 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 });\n\n // TODO remove duplication\n modelStream = stream.pipeThrough(\n new TransformStream<LanguageModelStreamPart, string | ErrorStreamPart>({\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 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 });\n\n modelStream = stream.pipeThrough(\n new TransformStream<LanguageModelStreamPart, string | ErrorStreamPart>({\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","import zodToJsonSchema from 'zod-to-json-schema';\nimport { LanguageModel } from '../language-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { Prompt } from '../prompt/prompt';\nimport { Tool } from '../tool/tool';\nimport { ToToolCallArray, parseToolCall } from './tool-call';\nimport { ToToolResultArray } from './tool-result';\nimport { getInputFormat } from '../prompt/get-input-format';\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 ...settings\n}: CallSettings &\n Prompt & {\n model: LanguageModel;\n tools?: TOOLS;\n }): Promise<GenerateTextResult<TOOLS>> {\n const modelResponse = await 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 ...settings,\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system,\n prompt,\n messages,\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 });\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\n constructor(options: {\n text: string;\n toolCalls: ToToolCallArray<TOOLS>;\n toolResults: ToToolResultArray<TOOLS>;\n }) {\n this.text = options.text;\n this.toolCalls = options.toolCalls;\n this.toolResults = options.toolResults;\n }\n}\n","import { ValueOf } from 'type-fest';\nimport { z } from 'zod';\nimport { safeParseJSON } from '../schema/parse-json';\nimport { ZodSchema } from '../schema/zod-schema';\nimport { LanguageModelToolCall } from '../language-model';\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: LanguageModelToolCall;\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: new ZodSchema(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 { LanguageModel } from '../language-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { Prompt } from '../prompt/prompt';\nimport { Tool } from '../tool';\nimport { runToolsTransformation } from './run-tools-transformation';\nimport { StreamTextHttpResponse } from './stream-text-http-response';\nimport { ToToolCall } from './tool-call';\nimport { ToToolResult } from './tool-result';\nimport { getInputFormat } from '../prompt/get-input-format';\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 ...settings\n}: CallSettings &\n Prompt & {\n model: LanguageModel;\n tools?: TOOLS;\n }): Promise<StreamTextResult<TOOLS>> {\n const { stream, warnings } = await 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 ...settings,\n inputFormat: getInputFormat({ prompt, messages }),\n prompt: convertToLanguageModelPrompt({\n system,\n prompt,\n messages,\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 },\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 toResponse() {\n return new StreamTextHttpResponse(this.rootStream);\n }\n}\n","import { nanoid } from 'nanoid';\nimport { LanguageModelStreamPart } from '../language-model';\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<LanguageModelStreamPart>;\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 LanguageModelStreamPart,\n TextStreamPart<TOOLS>\n >({\n transform(\n chunk: LanguageModelStreamPart,\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 '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 {\n AssistantMessage,\n DataMessage,\n FunctionCall,\n JSONValue,\n ToolCall,\n} from './types';\nimport { StreamString } from './utils';\n\nexport interface StreamPart<CODE extends string, NAME extends string, TYPE> {\n code: CODE;\n name: NAME;\n parse: (value: JSONValue) => { type: NAME; value: TYPE };\n}\n\nconst textStreamPart: StreamPart<'0', 'text', string> = {\n code: '0',\n name: 'text',\n parse: (value: JSONValue) => {\n if (typeof value !== 'string') {\n throw new Error('\"text\" parts expect a string value.');\n }\n return { type: 'text', value };\n },\n};\n\nconst functionCallStreamPart: StreamPart<\n '1',\n 'function_call',\n { function_call: FunctionCall }\n> = {\n code: '1',\n name: 'function_call',\n parse: (value: JSONValue) => {\n if (\n value == null ||\n typeof value !== 'object' ||\n !('function_call' in value) ||\n typeof value.function_call !== 'object' ||\n value.function_call == null ||\n !('name' in value.function_call) ||\n !('arguments' in value.function_call) ||\n typeof value.function_call.name !== 'string' ||\n typeof value.function_call.arguments !== 'string'\n ) {\n throw new Error(\n '\"function_call\" parts expect an object with a \"function_call\" property.',\n );\n }\n\n return {\n type: 'function_call',\n value: value as unknown as { function_call: FunctionCall },\n };\n },\n};\n\nconst dataStreamPart: StreamPart<'2', 'data', Array<JSONValue>> = {\n code: '2',\n name: 'data',\n parse: (value: JSONValue) => {\n if (!Array.isArray(value)) {\n throw new Error('\"data\" parts expect an array value.');\n }\n\n return { type: 'data', value };\n },\n};\n\nconst errorStreamPart: StreamPart<'3', 'error', string> = {\n code: '3',\n name: 'error',\n parse: (value: JSONValue) => {\n if (typeof value !== 'string') {\n throw new Error('\"error\" parts expect a string value.');\n }\n return { type: 'error', value };\n },\n};\n\nconst assistantMessageStreamPart: StreamPart<\n '4',\n 'assistant_message',\n AssistantMessage\n> = {\n code: '4',\n name: 'assistant_message',\n parse: (value: JSONValue) => {\n if (\n value == null ||\n typeof value !== 'object' ||\n !('id' in value) ||\n !('role' in value) ||\n !('content' in value) ||\n typeof value.id !== 'string' ||\n typeof value.role !== 'string' ||\n value.role !== 'assistant' ||\n !Array.isArray(value.content) ||\n !value.content.every(\n item =>\n item != null &&\n typeof item === 'object' &&\n 'type' in item &&\n item.type === 'text' &&\n 'text' in item &&\n item.text != null &&\n typeof item.text === 'object' &&\n 'value' in item.text &&\n typeof item.text.value === 'string',\n )\n ) {\n throw new Error(\n '\"assistant_message\" parts expect an object with an \"id\", \"role\", and \"content\" property.',\n );\n }\n\n return {\n type: 'assistant_message',\n value: value as AssistantMessage,\n };\n },\n};\n\nconst assistantControlDataStreamPart: StreamPart<\n '5',\n 'assistant_control_data',\n {\n threadId: string;\n messageId: string;\n }\n> = {\n code: '5',\n name: 'assistant_control_data',\n parse: (value: JSONValue) => {\n if (\n value == null ||\n typeof value !== 'object' ||\n !('threadId' in value) ||\n !('messageId' in value) ||\n typeof value.threadId !== 'string' ||\n typeof value.messageId !== 'string'\n ) {\n throw new Error(\n '\"assistant_control_data\" parts expect an object with a \"threadId\" and \"messageId\" property.',\n );\n }\n\n return {\n type: 'assistant_control_data',\n value: {\n threadId: value.threadId,\n messageId: value.messageId,\n },\n };\n },\n};\n\nconst dataMessageStreamPart: StreamPart<'6', 'data_message', DataMessage> = {\n code: '6',\n name: 'data_message',\n parse: (value: JSONValue) => {\n if (\n value == null ||\n typeof value !== 'object' ||\n !('role' in value) ||\n !('data' in value) ||\n typeof value.role !== 'string' ||\n value.role !== 'data'\n ) {\n throw new Error(\n '\"data_message\" parts expect an object with a \"role\" and \"data\" property.',\n );\n }\n\n return {\n type: 'data_message',\n value: value as DataMessage,\n };\n },\n};\n\nconst toolCallStreamPart: StreamPart<\n '7',\n 'tool_calls',\n { tool_calls: ToolCall[] }\n> = {\n code: '7',\n name: 'tool_calls',\n parse: (value: JSONValue) => {\n if (\n value == null ||\n typeof value !== 'object' ||\n !('tool_calls' in value) ||\n typeof value.tool_calls !== 'object' ||\n value.tool_calls == null ||\n !Array.isArray(value.tool_calls) ||\n value.tool_calls.some(tc => {\n tc == null ||\n typeof tc !== 'object' ||\n !('id' in tc) ||\n typeof tc.id !== 'string' ||\n !('type' in tc) ||\n typeof tc.type !== 'string' ||\n !('function' in tc) ||\n tc.function == null ||\n typeof tc.function !== 'object' ||\n !('arguments' in tc.function) ||\n typeof tc.function.name !== 'string' ||\n typeof tc.function.arguments !== 'string';\n })\n ) {\n throw new Error(\n '\"tool_calls\" parts expect an object with a ToolCallPayload.',\n );\n }\n\n return {\n type: 'tool_calls',\n value: value as unknown as { tool_calls: ToolCall[] },\n };\n },\n};\n\nconst messageAnnotationsStreamPart: StreamPart<\n '8',\n 'message_annotations',\n Array<JSONValue>\n> = {\n code: '8',\n name: 'message_annotations',\n parse: (value: JSONValue) => {\n if (!Array.isArray(value)) {\n throw new Error('\"message_annotations\" parts expect an array value.');\n }\n\n return { type: 'message_annotations', value };\n },\n};\n\nconst streamParts = [\n textStreamPart,\n functionCallStreamPart,\n dataStreamPart,\n errorStreamPart,\n assistantMessageStreamPart,\n assistantControlDataStreamPart,\n dataMessageStreamPart,\n toolCallStreamPart,\n messageAnnotationsStreamPart,\n] as const;\n\n// union type of all stream parts\ntype StreamParts =\n | typeof textStreamPart\n | typeof functionCallStreamPart\n | typeof dataStreamPart\n | typeof errorStreamPart\n | typeof assistantMessageStreamPart\n | typeof assistantControlDataStreamPart\n | typeof dataMessageStreamPart\n | typeof toolCallStreamPart\n | typeof messageAnnotationsStreamPart;\n/**\n * Maps the type of a stream part to its value type.\n */\ntype StreamPartValueType = {\n [P in StreamParts as P['name']]: ReturnType<P['parse']>['value'];\n};\n\nexport type StreamPartType =\n | ReturnType<typeof textStreamPart.parse>\n | ReturnType<typeof functionCallStreamPart.parse>\n | ReturnType<typeof dataStreamPart.parse>\n | ReturnType<typeof errorStreamPart.parse>\n | ReturnType<typeof assistantMessageStreamPart.parse>\n | ReturnType<typeof assistantControlDataStreamPart.parse>\n | ReturnType<typeof dataMessageStreamPart.parse>\n | ReturnType<typeof toolCallStreamPart.parse>\n | ReturnType<typeof messageAnnotationsStreamPart.parse>;\n\nexport const streamPartsByCode = {\n [textStreamPart.code]: textStreamPart,\n [functionCallStreamPart.code]: functionCallStreamPart,\n [dataStreamPart.code]: dataStreamPart,\n [errorStreamPart.code]: errorStreamPart,\n [assistantMessageStreamPart.code]: assistantMessageStreamPart,\n [assistantControlDataStreamPart.code]: assistantControlDataStreamPart,\n [dataMessageStreamPart.code]: dataMessageStreamPart,\n [toolCallStreamPart.code]: toolCallStreamPart,\n [messageAnnotationsStreamPart.code]: messageAnnotationsStreamPart,\n} as const;\n\n/**\n * The map of prefixes for data in the stream\n *\n * - 0: Text from the LLM response\n * - 1: (OpenAI) function_call responses\n * - 2: custom JSON added by the user using `Data`\n * - 6: (OpenAI) tool_call responses\n *\n * Example:\n * ```\n * 0:Vercel\n * 0:'s\n * 0: AI\n * 0: AI\n * 0: SDK\n * 0: is great\n * 0:!\n * 2: { \"someJson\": \"value\" }\n * 1: {\"function_call\": {\"name\": \"get_current_weather\", \"arguments\": \"{\\\\n\\\\\"location\\\\\": \\\\\"Charlottesville, Virginia\\\\\",\\\\n\\\\\"format\\\\\": \\\\\"celsius\\\\\"\\\\n}\"}}\n * 6: {\"tool_call\": {\"id\": \"tool_0\", \"type\": \"function\", \"function\": {\"name\": \"get_current_weather\", \"arguments\": \"{\\\\n\\\\\"location\\\\\": \\\\\"Charlottesville, Virginia\\\\\",\\\\n\\\\\"format\\\\\": \\\\\"celsius\\\\\"\\\\n}\"}}}\n *```\n */\nexport const StreamStringPrefixes = {\n [textStreamPart.name]: textStreamPart.code,\n [functionCallStreamPart.name]: functionCallStreamPart.code,\n [dataStreamPart.name]: dataStreamPart.code,\n [errorStreamPart.name]: errorStreamPart.code,\n [assistantMessageStreamPart.name]: assistantMessageStreamPart.code,\n [assistantControlDataStreamPart.name]: assistantControlDataStreamPart.code,\n [dataMessageStreamPart.name]: dataMessageStreamPart.code,\n [toolCallStreamPart.name]: toolCallStreamPart.code,\n [messageAnnotationsStreamPart.name]: messageAnnotationsStreamPart.code,\n} as const;\n\nexport const validCodes = streamParts.map(part => part.code);\n\n/**\n * Parses a stream part from a string.\n *\n * @param line The string to parse.\n * @returns The parsed stream part.\n * @throws An error if the string cannot be parsed.\n */\nexport const parseStreamPart = (line: string): StreamPartType => {\n const firstSeparatorIndex = line.indexOf(':');\n\n if (firstSeparatorIndex === -1) {\n throw new Error('Failed to parse stream string. No separator found.');\n }\n\n const prefix = line.slice(0, firstSeparatorIndex);\n\n if (!validCodes.includes(prefix as keyof typeof streamPartsByCode)) {\n throw new Error(`Failed to parse stream string. Invalid code ${prefix}.`);\n }\n\n const code = prefix as keyof typeof streamPartsByCode;\n\n const textValue = line.slice(firstSeparatorIndex + 1);\n const jsonValue: JSONValue = JSON.parse(textValue);\n\n return streamPartsByCode[code].parse(jsonValue);\n};\n\n/**\n * Prepends a string with a prefix from the `StreamChunkPrefixes`, JSON-ifies it,\n * and appends a new line.\n *\n * It ensures type-safety for the part type and value.\n */\nexport function formatStreamPart<T extends keyof StreamPartValueType>(\n type: T,\n value: StreamPartValueType[T],\n): StreamString {\n const streamPart = streamParts.find(part => part.name === type);\n\n if (!streamPart) {\n throw new Error(`Invalid stream part type: ${type}`);\n }\n\n return `${streamPart.code}:${JSON.stringify(value)}\\n`;\n}\n","import { customAlphabet } from 'nanoid/non-secure';\nimport {\n StreamPartType,\n StreamStringPrefixes,\n parseStreamPart,\n} from './stream-parts';\n\n// 7-character random string\nexport const nanoid = customAlphabet(\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n 7,\n);\n\n// simple decoder signatures:\nfunction createChunkDecoder(): (chunk: Uint8Array | undefined) => string;\nfunction createChunkDecoder(\n complex: false,\n): (chunk: Uint8Array | undefined) => string;\n// complex decoder signature:\nfunction createChunkDecoder(\n complex: true,\n): (chunk: Uint8Array | undefined) => StreamPartType[];\n// combined signature for when the client calls this function with a boolean:\nfunction createChunkDecoder(\n complex?: boolean,\n): (chunk: Uint8Array | undefined) => StreamPartType[] | string;\nfunction createChunkDecoder(complex?: boolean) {\n const decoder = new TextDecoder();\n\n if (!complex) {\n return function (chunk: Uint8Array | undefined): string {\n if (!chunk) return '';\n return decoder.decode(chunk, { stream: true });\n };\n }\n\n return function (chunk: Uint8Array | undefined) {\n const decoded = decoder\n .decode(chunk, { stream: true })\n .split('\\n')\n .filter(line => line !== ''); // splitting leaves an empty string at the end\n\n return decoded.map(parseStreamPart).filter(Boolean);\n };\n}\n\nexport { createChunkDecoder };\n\nexport const isStreamStringEqualToType = (\n type: keyof typeof StreamStringPrefixes,\n value: string,\n): value is StreamString =>\n value.startsWith(`${StreamStringPrefixes[type]}:`) && value.endsWith('\\n');\n\nexport type StreamString =\n `${(typeof StreamStringPrefixes)[keyof typeof StreamStringPrefixes]}:${string}\\n`;\n\n/**\n * A header sent to the client so it knows how to handle parsing the stream (as a deprecated text response or using the new prefixed protocol)\n */\nexport const COMPLEX_HEADER = 'X-Experimental-Stream-Data';\n","import { formatStreamPart } from '../../shared/stream-parts';\nimport { COMPLEX_HEADER } from '../../shared/utils';\nimport { TextStreamPart } from './stream-text';\n\nexport class StreamTextHttpResponse extends Response {\n constructor(messageStream: ReadableStream<TextStreamPart<any>>) {\n super(\n messageStream.pipeThrough(\n new TransformStream<TextStreamPart<any>, string>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'error': {\n // TODO forward errors to the client\n // controller.error(chunk.error);\n break;\n }\n\n case 'text-delta': {\n controller.enqueue(formatStreamPart('text', chunk.textDelta));\n break;\n }\n\n case 'tool-call': {\n // TODO need a way to send single tool calls to the client\n\n controller.enqueue(\n formatStreamPart('tool_calls', {\n tool_calls: [\n {\n type: 'function',\n id: chunk.toolCallId ?? '', // TODO client need to support null id\n function: {\n name: chunk.toolName,\n arguments: JSON.stringify(chunk.args),\n },\n },\n ],\n }),\n );\n break;\n }\n\n case 'tool-result': {\n // ignored\n break;\n }\n\n default: {\n const exhaustiveCheck: never = chunk;\n throw new Error(\n `Unhandled stream part type: ${exhaustiveCheck}`,\n );\n }\n }\n },\n }),\n ),\n {\n status: 200,\n headers: {\n 'Content-Type': 'text/plain; charset=utf-8',\n [COMPLEX_HEADER]: 'true',\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","export class UnsupportedFunctionalityError extends Error {\n readonly functionality: string;\n readonly provider: string;\n\n constructor({\n provider,\n functionality,\n }: {\n provider: string;\n functionality: string;\n }) {\n super(\n `Functionality not supported by the provider. ` +\n `Provider: ${provider}.\\n` +\n `Functionality: ${functionality}`,\n );\n\n this.name = 'UnsupportedFunctionalityError';\n\n this.provider = provider;\n this.functionality = functionality;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n\n provider: this.provider,\n functionality: this.functionality,\n };\n }\n}\n"],"mappings":"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","names":["SecureJSON","import_secure_json_parse","SecureJSON","ignored","import_zod_to_json_schema","tool","tool","zodToJsonSchema","import_zod_to_json_schema","tool","nanoid","tool","zodToJsonSchema","tool"]}