{"version":3,"file":"openai_functions.cjs","names":["MappingDocumentTransformer","Document","ChatOpenAI","createTaggingChain"],"sources":["../../src/document_transformers/openai_functions.ts"],"sourcesContent":["import {\n  Document,\n  MappingDocumentTransformer,\n} from \"@langchain/core/documents\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport {\n  type JsonSchema7ObjectType,\n  toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport { BaseChain } from \"../chains/base.js\";\nimport {\n  TaggingChainOptions,\n  createTaggingChain,\n} from \"../chains/openai_functions/index.js\";\n\n/**\n * A transformer that tags metadata to a document using a tagging chain.\n */\nexport class MetadataTagger extends MappingDocumentTransformer {\n  static lc_name() {\n    return \"MetadataTagger\";\n  }\n\n  protected taggingChain: BaseChain;\n\n  constructor(fields: { taggingChain: BaseChain }) {\n    super();\n    this.taggingChain = fields.taggingChain;\n    if (this.taggingChain.inputKeys.length !== 1) {\n      throw new Error(\n        \"Invalid input chain. The input chain must have exactly one input.\"\n      );\n    }\n    if (this.taggingChain.outputKeys.length !== 1) {\n      throw new Error(\n        \"Invalid input chain. The input chain must have exactly one output.\"\n      );\n    }\n  }\n\n  async _transformDocument(document: Document): Promise<Document> {\n    const taggingChainResponse = await this.taggingChain.call({\n      [this.taggingChain.inputKeys[0]]: document.pageContent,\n    });\n    const extractedMetadata =\n      taggingChainResponse[this.taggingChain.outputKeys[0]];\n    return new Document({\n      pageContent: document.pageContent,\n      metadata: { ...extractedMetadata, ...document.metadata },\n    });\n  }\n}\n\nexport function createMetadataTagger(\n  schema: JsonSchema7ObjectType,\n  options: TaggingChainOptions & { llm?: ChatOpenAI }\n) {\n  const { llm = new ChatOpenAI({ model: \"gpt-3.5-turbo-0613\" }), ...rest } =\n    options;\n  const taggingChain = createTaggingChain(schema, llm, rest);\n  return new MetadataTagger({ taggingChain });\n}\n\nexport function createMetadataTaggerFromZod(\n  schema: InteropZodObject,\n  options: TaggingChainOptions & { llm?: ChatOpenAI }\n) {\n  return createMetadataTagger(\n    toJsonSchema(schema) as JsonSchema7ObjectType,\n    options\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,IAAa,iBAAb,cAAoCA,0BAAAA,2BAA2B;CAC7D,OAAO,UAAU;AACf,SAAO;;CAGT;CAEA,YAAY,QAAqC;AAC/C,SAAO;AACP,OAAK,eAAe,OAAO;AAC3B,MAAI,KAAK,aAAa,UAAU,WAAW,EACzC,OAAM,IAAI,MACR,oEACD;AAEH,MAAI,KAAK,aAAa,WAAW,WAAW,EAC1C,OAAM,IAAI,MACR,qEACD;;CAIL,MAAM,mBAAmB,UAAuC;EAI9D,MAAM,qBAHuB,MAAM,KAAK,aAAa,KAAK,GACvD,KAAK,aAAa,UAAU,KAAK,SAAS,aAC5C,CAAC,EAEqB,KAAK,aAAa,WAAW;AACpD,SAAO,IAAIC,0BAAAA,SAAS;GAClB,aAAa,SAAS;GACtB,UAAU;IAAE,GAAG;IAAmB,GAAG,SAAS;IAAU;GACzD,CAAC;;;AAIN,SAAgB,qBACd,QACA,SACA;CACA,MAAM,EAAE,MAAM,IAAIC,kBAAAA,WAAW,EAAE,OAAO,sBAAsB,CAAC,EAAE,GAAG,SAChE;AAEF,QAAO,IAAI,eAAe,EAAE,cADPC,gBAAAA,mBAAmB,QAAQ,KAAK,KAAK,EAChB,CAAC;;AAG7C,SAAgB,4BACd,QACA,SACA;AACA,QAAO,sBAAA,GAAA,kCAAA,cACQ,OAAO,EACpB,QACD"}