UNPKG

@langchain/core

Version:
1 lines 18.4 kB
{"version":3,"file":"data.cjs","names":["content_block: object","content_block: Data.URLContentBlock | Data.Base64ContentBlock","mime_type: string","parameters: Record<string, string>","mime_type: string | undefined","block: Data.DataContentBlock","converter: StandardContentBlockConverter<Formats>"],"sources":["../../../src/messages/content/data.ts"],"sourcesContent":["import { BaseContentBlock } from \"./base.js\";\n\n/**\n * @deprecated\n * Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport type ImageDetail = \"auto\" | \"low\" | \"high\";\n\n/**\n * @deprecated\n * Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport type MessageContentText = {\n type: \"text\";\n text: string;\n};\n\n/**\n * @deprecated\n * Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport type MessageContentImageUrl = {\n type: \"image_url\";\n image_url: string | { url: string; detail?: ImageDetail };\n};\n\n/**\n * @deprecated\n * Use {@link ContentBlock} instead.\n */\nexport type MessageContentComplex =\n | MessageContentText\n | MessageContentImageUrl\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | (Record<string, any> & { type?: \"text\" | \"image_url\" | string })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | (Record<string, any> & { type?: never });\n\nexport type Data = never;\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport declare namespace Data {\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Data} instead\n */\n export interface BaseDataContentBlock extends BaseContentBlock {\n mime_type?: string;\n metadata?: Record<string, unknown>;\n }\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Data} instead\n */\n export interface URLContentBlock extends BaseDataContentBlock {\n type: \"image\" | \"audio\" | \"file\";\n source_type: \"url\";\n url: string;\n }\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Data} instead\n */\n export interface Base64ContentBlock extends BaseDataContentBlock {\n type: \"image\" | \"audio\" | \"file\";\n source_type: \"base64\";\n data: string;\n }\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Data} instead\n */\n export interface PlainTextContentBlock extends BaseDataContentBlock {\n type: \"file\" | \"text\";\n source_type: \"text\";\n text: string;\n }\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Data} instead\n */\n export interface IDContentBlock extends BaseDataContentBlock {\n type: \"image\" | \"audio\" | \"file\";\n source_type: \"id\";\n id: string;\n }\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Standard} instead\n */\n export type DataContentBlock =\n | URLContentBlock\n | Base64ContentBlock\n | PlainTextContentBlock\n | IDContentBlock;\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Standard} instead\n */\n export type StandardImageBlock = (\n | URLContentBlock\n | Base64ContentBlock\n | IDContentBlock\n ) & {\n type: \"image\";\n };\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Standard} instead\n */\n export type StandardAudioBlock = (\n | URLContentBlock\n | Base64ContentBlock\n | IDContentBlock\n ) & {\n type: \"audio\";\n };\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Standard} instead\n */\n export type StandardFileBlock = (\n | URLContentBlock\n | Base64ContentBlock\n | IDContentBlock\n | PlainTextContentBlock\n ) & {\n type: \"file\";\n };\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Standard} instead\n */\n export type StandardTextBlock = PlainTextContentBlock & {\n type: \"text\";\n };\n\n /**\n * @deprecated\n * Use {@link ContentBlock.Multimodal.Data} instead\n */\n export type DataContentBlockType = DataContentBlock[\"type\"];\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isDataContentBlock(\n content_block: object\n): content_block is Data.DataContentBlock {\n return (\n typeof content_block === \"object\" &&\n content_block !== null &&\n \"type\" in content_block &&\n typeof content_block.type === \"string\" &&\n \"source_type\" in content_block &&\n (content_block.source_type === \"url\" ||\n content_block.source_type === \"base64\" ||\n content_block.source_type === \"text\" ||\n content_block.source_type === \"id\")\n );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isURLContentBlock(\n content_block: object\n): content_block is Data.URLContentBlock {\n return (\n isDataContentBlock(content_block) &&\n content_block.source_type === \"url\" &&\n \"url\" in content_block &&\n typeof content_block.url === \"string\"\n );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isBase64ContentBlock(\n content_block: object\n): content_block is Data.Base64ContentBlock {\n return (\n isDataContentBlock(content_block) &&\n content_block.source_type === \"base64\" &&\n \"data\" in content_block &&\n typeof content_block.data === \"string\"\n );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isPlainTextContentBlock(\n content_block: object\n): content_block is Data.PlainTextContentBlock {\n return (\n isDataContentBlock(content_block) &&\n content_block.source_type === \"text\" &&\n \"text\" in content_block &&\n typeof content_block.text === \"string\"\n );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isIDContentBlock(\n content_block: object\n): content_block is Data.IDContentBlock {\n return (\n isDataContentBlock(content_block) &&\n content_block.source_type === \"id\" &&\n \"id\" in content_block &&\n typeof content_block.id === \"string\"\n );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function convertToOpenAIImageBlock(\n content_block: Data.URLContentBlock | Data.Base64ContentBlock\n) {\n if (isDataContentBlock(content_block)) {\n if (content_block.source_type === \"url\") {\n return {\n type: \"image_url\",\n image_url: {\n url: content_block.url,\n },\n };\n }\n if (content_block.source_type === \"base64\") {\n if (!content_block.mime_type) {\n throw new Error(\"mime_type key is required for base64 data.\");\n }\n const mime_type = content_block.mime_type;\n return {\n type: \"image_url\",\n image_url: {\n url: `data:${mime_type};base64,${content_block.data}`,\n },\n };\n }\n }\n throw new Error(\n \"Unsupported source type. Only 'url' and 'base64' are supported.\"\n );\n}\n\n/**\n * Utility function for ChatModelProviders. Parses a mime type into a type, subtype, and parameters.\n *\n * @param mime_type - The mime type to parse.\n * @returns An object containing the type, subtype, and parameters.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function parseMimeType(mime_type: string): {\n type: string;\n subtype: string;\n parameters: Record<string, string>;\n} {\n const parts = mime_type.split(\";\")[0].split(\"/\");\n if (parts.length !== 2) {\n throw new Error(\n `Invalid mime type: \"${mime_type}\" - does not match type/subtype format.`\n );\n }\n\n const type = parts[0].trim();\n const subtype = parts[1].trim();\n\n if (type === \"\" || subtype === \"\") {\n throw new Error(\n `Invalid mime type: \"${mime_type}\" - type or subtype is empty.`\n );\n }\n\n const parameters: Record<string, string> = {};\n\n for (const parameterKvp of mime_type.split(\";\").slice(1)) {\n const parameterParts = parameterKvp.split(\"=\");\n if (parameterParts.length !== 2) {\n throw new Error(`Invalid parameter syntax in mime type: \"${mime_type}\".`);\n }\n const key = parameterParts[0].trim();\n const value = parameterParts[1].trim();\n if (key === \"\") {\n throw new Error(`Invalid parameter syntax in mime type: \"${mime_type}\".`);\n }\n\n parameters[key] = value;\n }\n\n return {\n type,\n subtype,\n parameters,\n };\n}\n\n/**\n * Utility function for ChatModelProviders. Parses a base64 data URL into a typed array or string.\n *\n * @param dataUrl - The base64 data URL to parse.\n * @param asTypedArray - Whether to return the data as a typed array.\n * @returns An object containing the parsed data and mime type, or undefined if the data URL is invalid.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function parseBase64DataUrl({\n dataUrl,\n asTypedArray,\n}: {\n dataUrl: string;\n asTypedArray: true;\n}): { data: Uint8Array; mime_type: string } | undefined;\n\n/**\n * Utility function for ChatModelProviders. Parses a base64 data URL into a typed array or string.\n *\n * @param dataUrl - The base64 data URL to parse.\n * @param asTypedArray - Whether to return the data as a typed array.\n * @returns The parsed data and mime type, or undefined if the data URL is invalid.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function parseBase64DataUrl({\n dataUrl,\n asTypedArray,\n}: {\n dataUrl: string;\n asTypedArray?: false;\n}): { data: string; mime_type: string } | undefined;\n\n/**\n * Utility function for ChatModelProviders. Parses a base64 data URL into a typed array or string.\n *\n * @param dataUrl - The base64 data URL to parse.\n * @param asTypedArray - Whether to return the data as a typed array.\n * @returns The parsed data and mime type, or undefined if the data URL is invalid.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function parseBase64DataUrl({\n dataUrl: data_url,\n asTypedArray = false,\n}: {\n dataUrl: string;\n asTypedArray?: boolean;\n}): { data: string | Uint8Array; mime_type: string } | undefined {\n const formatMatch = data_url.match(\n /^data:(\\w+\\/\\w+);base64,([A-Za-z0-9+/]+=*)$/\n );\n let mime_type: string | undefined;\n\n if (formatMatch) {\n mime_type = formatMatch[1].toLowerCase();\n const data = asTypedArray\n ? Uint8Array.from(atob(formatMatch[2]), (c) => c.charCodeAt(0))\n : formatMatch[2];\n return {\n mime_type,\n data,\n };\n }\n\n return undefined;\n}\n\n/**\n * A bag of provider-specific content block types.\n *\n * Allows implementations of {@link StandardContentBlockConverter} and related to be defined only in\n * terms of the types they support. Also allows for forward compatibility as the set of known\n * standard types grows, as the set of types can be extended without breaking existing\n * implementations of the aforementioned interfaces.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport type ProviderFormatTypes<\n TextFormat = unknown,\n ImageFormat = unknown,\n AudioFormat = unknown,\n FileFormat = unknown,\n VideoFormat = unknown\n> = {\n text: TextFormat;\n image: ImageFormat;\n audio: AudioFormat;\n file: FileFormat;\n video: VideoFormat;\n};\n\n/**\n * Utility interface for converting between standard and provider-specific data content blocks, to be\n * used when implementing chat model providers.\n *\n * Meant to be used with {@link convertToProviderContentBlock} and\n * {@link convertToStandardContentBlock} rather than being consumed directly.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport interface StandardContentBlockConverter<\n Formats extends Partial<ProviderFormatTypes>\n> {\n /**\n * The name of the provider type that corresponds to the provider-specific content block types\n * that this converter supports.\n */\n providerName: string;\n\n /**\n * Convert from a standard image block to a provider's proprietary image block format.\n * @param block - The standard image block to convert.\n * @returns The provider image block.\n */\n fromStandardImageBlock?(block: Data.StandardImageBlock): Formats[\"image\"];\n\n /**\n * Convert from a standard audio block to a provider's proprietary audio block format.\n * @param block - The standard audio block to convert.\n * @returns The provider audio block.\n */\n fromStandardAudioBlock?(block: Data.StandardAudioBlock): Formats[\"audio\"];\n\n /**\n * Convert from a standard file block to a provider's proprietary file block format.\n * @param block - The standard file block to convert.\n * @returns The provider file block.\n */\n fromStandardFileBlock?(block: Data.StandardFileBlock): Formats[\"file\"];\n\n /**\n * Convert from a standard text block to a provider's proprietary text block format.\n * @param block - The standard text block to convert.\n * @returns The provider text block.\n */\n fromStandardTextBlock?(block: Data.StandardTextBlock): Formats[\"text\"];\n}\n\n/**\n * Convert from a standard data content block to a provider's proprietary data content block format.\n *\n * Don't override this method. Instead, override the more specific conversion methods and use this\n * method unmodified.\n *\n * @param block - The standard data content block to convert.\n * @returns The provider data content block.\n * @throws An error if the standard data content block type is not supported.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function convertToProviderContentBlock<\n Formats extends Partial<ProviderFormatTypes>\n>(\n block: Data.DataContentBlock,\n converter: StandardContentBlockConverter<Formats>\n): Formats[keyof Formats] {\n if (block.type === \"text\") {\n if (!converter.fromStandardTextBlock) {\n throw new Error(\n `Converter for ${converter.providerName} does not implement \\`fromStandardTextBlock\\` method.`\n );\n }\n return converter.fromStandardTextBlock(block as Data.StandardTextBlock);\n }\n if (block.type === \"image\") {\n if (!converter.fromStandardImageBlock) {\n throw new Error(\n `Converter for ${converter.providerName} does not implement \\`fromStandardImageBlock\\` method.`\n );\n }\n return converter.fromStandardImageBlock(block as Data.StandardImageBlock);\n }\n if (block.type === \"audio\") {\n if (!converter.fromStandardAudioBlock) {\n throw new Error(\n `Converter for ${converter.providerName} does not implement \\`fromStandardAudioBlock\\` method.`\n );\n }\n return converter.fromStandardAudioBlock(block as Data.StandardAudioBlock);\n }\n if (block.type === \"file\") {\n if (!converter.fromStandardFileBlock) {\n throw new Error(\n `Converter for ${converter.providerName} does not implement \\`fromStandardFileBlock\\` method.`\n );\n }\n return converter.fromStandardFileBlock(block as Data.StandardFileBlock);\n }\n throw new Error(\n `Unable to convert content block type '${block.type}' to provider-specific format: not recognized.`\n );\n}\n"],"mappings":";;;;;AA4JA,SAAgB,mBACdA,eACwC;AACxC,QACE,OAAO,kBAAkB,YACzB,kBAAkB,QAClB,UAAU,iBACV,OAAO,cAAc,SAAS,YAC9B,iBAAiB,kBAChB,cAAc,gBAAgB,SAC7B,cAAc,gBAAgB,YAC9B,cAAc,gBAAgB,UAC9B,cAAc,gBAAgB;AAEnC;;;;AAKD,SAAgB,kBACdA,eACuC;AACvC,QACE,mBAAmB,cAAc,IACjC,cAAc,gBAAgB,SAC9B,SAAS,iBACT,OAAO,cAAc,QAAQ;AAEhC;;;;AAKD,SAAgB,qBACdA,eAC0C;AAC1C,QACE,mBAAmB,cAAc,IACjC,cAAc,gBAAgB,YAC9B,UAAU,iBACV,OAAO,cAAc,SAAS;AAEjC;;;;AAKD,SAAgB,wBACdA,eAC6C;AAC7C,QACE,mBAAmB,cAAc,IACjC,cAAc,gBAAgB,UAC9B,UAAU,iBACV,OAAO,cAAc,SAAS;AAEjC;;;;AAKD,SAAgB,iBACdA,eACsC;AACtC,QACE,mBAAmB,cAAc,IACjC,cAAc,gBAAgB,QAC9B,QAAQ,iBACR,OAAO,cAAc,OAAO;AAE/B;;;;AAKD,SAAgB,0BACdC,eACA;AACA,KAAI,mBAAmB,cAAc,EAAE;AACrC,MAAI,cAAc,gBAAgB,MAChC,QAAO;GACL,MAAM;GACN,WAAW,EACT,KAAK,cAAc,IACpB;EACF;AAEH,MAAI,cAAc,gBAAgB,UAAU;AAC1C,OAAI,CAAC,cAAc,UACjB,OAAM,IAAI,MAAM;GAElB,MAAM,YAAY,cAAc;AAChC,UAAO;IACL,MAAM;IACN,WAAW,EACT,KAAK,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,cAAc,MAAM,CACtD;GACF;EACF;CACF;AACD,OAAM,IAAI,MACR;AAEH;;;;;;;;;AAUD,SAAgB,cAAcC,WAI5B;CACA,MAAM,QAAQ,UAAU,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI;AAChD,KAAI,MAAM,WAAW,EACnB,OAAM,IAAI,MACR,CAAC,oBAAoB,EAAE,UAAU,uCAAuC,CAAC;CAI7E,MAAM,OAAO,MAAM,GAAG,MAAM;CAC5B,MAAM,UAAU,MAAM,GAAG,MAAM;AAE/B,KAAI,SAAS,MAAM,YAAY,GAC7B,OAAM,IAAI,MACR,CAAC,oBAAoB,EAAE,UAAU,6BAA6B,CAAC;CAInE,MAAMC,aAAqC,CAAE;AAE7C,MAAK,MAAM,gBAAgB,UAAU,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE;EACxD,MAAM,iBAAiB,aAAa,MAAM,IAAI;AAC9C,MAAI,eAAe,WAAW,EAC5B,OAAM,IAAI,MAAM,CAAC,wCAAwC,EAAE,UAAU,EAAE,CAAC;EAE1E,MAAM,MAAM,eAAe,GAAG,MAAM;EACpC,MAAM,QAAQ,eAAe,GAAG,MAAM;AACtC,MAAI,QAAQ,GACV,OAAM,IAAI,MAAM,CAAC,wCAAwC,EAAE,UAAU,EAAE,CAAC;EAG1E,WAAW,OAAO;CACnB;AAED,QAAO;EACL;EACA;EACA;CACD;AACF;;;;;;;;;;AA6CD,SAAgB,mBAAmB,EACjC,SAAS,UACT,eAAe,OAIhB,EAAgE;CAC/D,MAAM,cAAc,SAAS,MAC3B,8CACD;CACD,IAAIC;AAEJ,KAAI,aAAa;EACf,YAAY,YAAY,GAAG,aAAa;EACxC,MAAM,OAAO,eACT,WAAW,KAAK,KAAK,YAAY,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,GAC7D,YAAY;AAChB,SAAO;GACL;GACA;EACD;CACF;AAED,QAAO;AACR;;;;;;;;;;;;;AAqFD,SAAgB,8BAGdC,OACAC,WACwB;AACxB,KAAI,MAAM,SAAS,QAAQ;AACzB,MAAI,CAAC,UAAU,sBACb,OAAM,IAAI,MACR,CAAC,cAAc,EAAE,UAAU,aAAa,qDAAqD,CAAC;AAGlG,SAAO,UAAU,sBAAsB,MAAgC;CACxE;AACD,KAAI,MAAM,SAAS,SAAS;AAC1B,MAAI,CAAC,UAAU,uBACb,OAAM,IAAI,MACR,CAAC,cAAc,EAAE,UAAU,aAAa,sDAAsD,CAAC;AAGnG,SAAO,UAAU,uBAAuB,MAAiC;CAC1E;AACD,KAAI,MAAM,SAAS,SAAS;AAC1B,MAAI,CAAC,UAAU,uBACb,OAAM,IAAI,MACR,CAAC,cAAc,EAAE,UAAU,aAAa,sDAAsD,CAAC;AAGnG,SAAO,UAAU,uBAAuB,MAAiC;CAC1E;AACD,KAAI,MAAM,SAAS,QAAQ;AACzB,MAAI,CAAC,UAAU,sBACb,OAAM,IAAI,MACR,CAAC,cAAc,EAAE,UAAU,aAAa,qDAAqD,CAAC;AAGlG,SAAO,UAAU,sBAAsB,MAAgC;CACxE;AACD,OAAM,IAAI,MACR,CAAC,sCAAsC,EAAE,MAAM,KAAK,8CAA8C,CAAC;AAEtG"}