UNPKG

@mastra/core

Version:
1 lines 3.71 kB
{"version":3,"file":"content-fINNgB3A.cjs","names":["MastraError","ErrorDomain","ErrorCategory"],"sources":["../src/stream/aisdk/v5/compat/content.ts"],"sourcesContent":["import type { LanguageModelV2DataContent } from '@ai-sdk/provider-v5';\nimport type { DataContent } from '@internal/ai-sdk-v5';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../../../error';\n\nfunction splitDataUrl(dataUrl: string): {\n mediaType: string | undefined;\n base64Content: string | undefined;\n} {\n try {\n const [header, base64Content] = dataUrl.split(',');\n return {\n mediaType: header?.split(';')[0]?.split(':')[1],\n base64Content,\n };\n } catch {\n return {\n mediaType: undefined,\n base64Content: undefined,\n };\n }\n}\n\n/**\n * Flat generated-file data is `string | Uint8Array`, where strings normally\n * hold base64. URL-backed V4 generated files flatten to http(s) URL strings\n * (matching AI SDK v7's own conversion), so consumers that interpret string\n * data as base64 must use this check to tell the two apart. Base64 content\n * never parses as an http(s) URL, making the check unambiguous.\n */\nexport function isUrlString(data: string): boolean {\n if (!data.startsWith('http://') && !data.startsWith('https://')) {\n return false;\n }\n\n try {\n new URL(data);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function convertToDataContent(content: DataContent | URL): {\n data: LanguageModelV2DataContent;\n mediaType: string | undefined;\n} {\n // Buffer & Uint8Array:\n if (content instanceof Uint8Array) {\n return { data: content, mediaType: undefined };\n }\n\n // ArrayBuffer needs conversion to Uint8Array (lightweight):\n if (content instanceof ArrayBuffer) {\n return { data: new Uint8Array(content), mediaType: undefined };\n }\n\n // Attempt to create a URL from the data. If it fails, we can assume the data\n // is not a URL and likely some other sort of data.\n if (typeof content === 'string') {\n try {\n content = new URL(content);\n } catch {\n // ignored\n }\n }\n\n // Extract data from data URL:\n if (content instanceof URL && content.protocol === 'data:') {\n const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(content.toString());\n\n if (dataUrlMediaType == null || base64Content == null) {\n throw new MastraError({\n id: 'INVALID_DATA_URL_FORMAT',\n text: `Invalid data URL format in content ${content.toString()}`,\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n });\n }\n\n return { data: base64Content, mediaType: dataUrlMediaType };\n }\n\n return { data: content, mediaType: undefined };\n}\n"],"mappings":";;AAIA,SAAS,aAAa,SAGpB;CACA,IAAI;EACF,MAAM,CAAC,QAAQ,iBAAiB,QAAQ,MAAM,GAAG;EACjD,OAAO;GACL,WAAW,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;GAC7C;EACF;CACF,QAAQ;EACN,OAAO;GACL,WAAW,KAAA;GACX,eAAe,KAAA;EACjB;CACF;AACF;;;;;;;;AASA,SAAgB,YAAY,MAAuB;CACjD,IAAI,CAAC,KAAK,WAAW,SAAS,KAAK,CAAC,KAAK,WAAW,UAAU,GAC5D,OAAO;CAGT,IAAI;EACF,IAAI,IAAI,IAAI;EACZ,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,qBAAqB,SAGnC;CAEA,IAAI,mBAAmB,YACrB,OAAO;EAAE,MAAM;EAAS,WAAW,KAAA;CAAU;CAI/C,IAAI,mBAAmB,aACrB,OAAO;EAAE,MAAM,IAAI,WAAW,OAAO;EAAG,WAAW,KAAA;CAAU;CAK/D,IAAI,OAAO,YAAY,UACrB,IAAI;EACF,UAAU,IAAI,IAAI,OAAO;CAC3B,QAAQ,CAER;CAIF,IAAI,mBAAmB,OAAO,QAAQ,aAAa,SAAS;EAC1D,MAAM,EAAE,WAAW,kBAAkB,kBAAkB,aAAa,QAAQ,SAAS,CAAC;EAEtF,IAAI,oBAAoB,QAAQ,iBAAiB,MAC/C,MAAM,IAAIA,cAAAA,YAAY;GACpB,IAAI;GACJ,MAAM,sCAAsC,QAAQ,SAAS;GAC7D,QAAQC,cAAAA,YAAY;GACpB,UAAUC,cAAAA,cAAc;EAC1B,CAAC;EAGH,OAAO;GAAE,MAAM;GAAe,WAAW;EAAiB;CAC5D;CAEA,OAAO;EAAE,MAAM;EAAS,WAAW,KAAA;CAAU;AAC/C"}