UNPKG

@langchain/core

Version:
1 lines 5.81 kB
{"version":3,"file":"transform.cjs","names":["BaseOutputParser","isBaseMessageChunk","ChatGenerationChunk","isBaseMessage","convertToChunk","GenerationChunk"],"sources":["../../src/output_parsers/transform.ts"],"sourcesContent":["import { deepCompareStrict } from \"@cfworker/json-schema\";\nimport { BaseOutputParser } from \"./base.js\";\nimport {\n type BaseMessage,\n isBaseMessage,\n isBaseMessageChunk,\n} from \"../messages/base.js\";\nimport { convertToChunk } from \"../messages/utils.js\";\nimport type { BaseCallbackConfig } from \"../callbacks/manager.js\";\nimport {\n type Generation,\n type ChatGeneration,\n GenerationChunk,\n ChatGenerationChunk,\n} from \"../outputs.js\";\n\n/**\n * Class to parse the output of an LLM call that also allows streaming inputs.\n */\nexport abstract class BaseTransformOutputParser<\n T = unknown,\n> extends BaseOutputParser<T> {\n async *_transform(\n inputGenerator: AsyncGenerator<string | BaseMessage>\n ): AsyncGenerator<T> {\n for await (const chunk of inputGenerator) {\n if (typeof chunk === \"string\") {\n yield this.parseResult([{ text: chunk }]);\n } else {\n yield this.parseResult([\n {\n message: chunk,\n text: this._baseMessageToString(chunk),\n },\n ]);\n }\n }\n }\n\n /**\n * Transforms an asynchronous generator of input into an asynchronous\n * generator of parsed output.\n * @param inputGenerator An asynchronous generator of input.\n * @param options A configuration object.\n * @returns An asynchronous generator of parsed output.\n */\n async *transform(\n inputGenerator: AsyncGenerator<string | BaseMessage>,\n options: BaseCallbackConfig\n ): AsyncGenerator<T> {\n yield* this._transformStreamWithConfig(\n inputGenerator,\n this._transform.bind(this),\n {\n ...options,\n runType: \"parser\",\n }\n );\n }\n}\n\nexport type BaseCumulativeTransformOutputParserInput = { diff?: boolean };\n\n/**\n * A base class for output parsers that can handle streaming input. It\n * extends the `BaseTransformOutputParser` class and provides a method for\n * converting parsed outputs into a diff format.\n */\nexport abstract class BaseCumulativeTransformOutputParser<\n T = unknown,\n> extends BaseTransformOutputParser<T> {\n protected diff = false;\n\n constructor(fields?: BaseCumulativeTransformOutputParserInput) {\n super(fields);\n this.diff = fields?.diff ?? this.diff;\n }\n\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n protected abstract _diff(prev: any | undefined, next: any): any;\n\n abstract parsePartialResult(\n generations: Generation[] | ChatGeneration[]\n ): Promise<T | undefined>;\n\n async *_transform(\n inputGenerator: AsyncGenerator<string | BaseMessage>\n ): AsyncGenerator<T> {\n let prevParsed: T | undefined;\n let accGen: GenerationChunk | undefined;\n for await (const chunk of inputGenerator) {\n if (typeof chunk !== \"string\" && typeof chunk.content !== \"string\") {\n throw new Error(\"Cannot handle non-string output.\");\n }\n let chunkGen: GenerationChunk;\n if (isBaseMessageChunk(chunk)) {\n if (typeof chunk.content !== \"string\") {\n throw new Error(\"Cannot handle non-string message output.\");\n }\n chunkGen = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n });\n } else if (isBaseMessage(chunk)) {\n if (typeof chunk.content !== \"string\") {\n throw new Error(\"Cannot handle non-string message output.\");\n }\n chunkGen = new ChatGenerationChunk({\n message: convertToChunk(chunk),\n text: chunk.content,\n });\n } else {\n chunkGen = new GenerationChunk({ text: chunk });\n }\n\n if (accGen === undefined) {\n accGen = chunkGen;\n } else {\n accGen = accGen.concat(chunkGen);\n }\n\n const parsed = await this.parsePartialResult([accGen]);\n if (\n parsed !== undefined &&\n parsed !== null &&\n !deepCompareStrict(parsed, prevParsed)\n ) {\n if (this.diff) {\n yield this._diff(prevParsed, parsed);\n } else {\n yield parsed;\n }\n prevParsed = parsed;\n }\n }\n }\n\n getFormatInstructions(): string {\n return \"\";\n }\n}\n"],"mappings":";;;;;;;;;AAmBA,IAAsB,4BAAtB,cAEUA,eAAAA,iBAAoB;CAC5B,OAAO,WACL,gBACmB;EACnB,WAAW,MAAM,SAAS,gBACxB,IAAI,OAAO,UAAU,UACnB,MAAM,KAAK,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC,CAAC;OAExC,MAAM,KAAK,YAAY,CACrB;GACE,SAAS;GACT,MAAM,KAAK,qBAAqB,KAAK;EACvC,CACF,CAAC;CAGP;;;;;;;;CASA,OAAO,UACL,gBACA,SACmB;EACnB,OAAO,KAAK,2BACV,gBACA,KAAK,WAAW,KAAK,IAAI,GACzB;GACE,GAAG;GACH,SAAS;EACX,CACF;CACF;AACF;;;;;;AASA,IAAsB,sCAAtB,cAEU,0BAA6B;CACrC,OAAiB;CAEjB,YAAY,QAAmD;EAC7D,MAAM,MAAM;EACZ,KAAK,OAAO,QAAQ,QAAQ,KAAK;CACnC;CASA,OAAO,WACL,gBACmB;EACnB,IAAI;EACJ,IAAI;EACJ,WAAW,MAAM,SAAS,gBAAgB;GACxC,IAAI,OAAO,UAAU,YAAY,OAAO,MAAM,YAAY,UACxD,MAAM,IAAI,MAAM,kCAAkC;GAEpD,IAAI;GACJ,IAAIC,aAAAA,mBAAmB,KAAK,GAAG;IAC7B,IAAI,OAAO,MAAM,YAAY,UAC3B,MAAM,IAAI,MAAM,0CAA0C;IAE5D,WAAW,IAAIC,gBAAAA,oBAAoB;KACjC,SAAS;KACT,MAAM,MAAM;IACd,CAAC;GACH,OAAO,IAAIC,aAAAA,cAAc,KAAK,GAAG;IAC/B,IAAI,OAAO,MAAM,YAAY,UAC3B,MAAM,IAAI,MAAM,0CAA0C;IAE5D,WAAW,IAAID,gBAAAA,oBAAoB;KACjC,SAASE,cAAAA,eAAe,KAAK;KAC7B,MAAM,MAAM;IACd,CAAC;GACH,OACE,WAAW,IAAIC,gBAAAA,gBAAgB,EAAE,MAAM,MAAM,CAAC;GAGhD,IAAI,WAAW,KAAA,GACb,SAAS;QAET,SAAS,OAAO,OAAO,QAAQ;GAGjC,MAAM,SAAS,MAAM,KAAK,mBAAmB,CAAC,MAAM,CAAC;GACrD,IACE,WAAW,KAAA,KACX,WAAW,QACX,EAAA,GAAA,sBAAA,kBAAA,CAAmB,QAAQ,UAAU,GACrC;IACA,IAAI,KAAK,MACP,MAAM,KAAK,MAAM,YAAY,MAAM;SAEnC,MAAM;IAER,aAAa;GACf;EACF;CACF;CAEA,wBAAgC;EAC9B,OAAO;CACT;AACF"}