const { zodToJsonSchema } = require('zod-to-json-schema'); const { PromptTemplate } = require('langchain/prompts'); const { JsonKeyOutputFunctionsParser } = require('langchain/output_parsers'); const { LLMChain } = require('langchain/chains'); function getExtractionFunctions(schema) { return [ { name: 'information_extraction', description: 'Extracts the relevant information from the passage.', parameters: { type: 'object', properties: { info: { type: 'array', items: { type: schema.type, properties: schema.properties, required: schema.required, }, }, }, required: ['info'], }, }, ]; } const _EXTRACTION_TEMPLATE = `Extract and save the relevant entities mentioned in the following passage together with their properties. Passage: {input} `; function createExtractionChain(schema, llm, options = {}) { const { prompt = PromptTemplate.fromTemplate(_EXTRACTION_TEMPLATE), ...rest } = options; const functions = getExtractionFunctions(schema); const outputParser = new JsonKeyOutputFunctionsParser({ attrName: 'info' }); return new LLMChain({ llm, prompt, llmKwargs: { functions }, outputParser, tags: ['openai_functions', 'extraction'], ...rest, }); } function createExtractionChainFromZod(schema, llm) { return createExtractionChain(zodToJsonSchema(schema), llm); } module.exports = { createExtractionChain, createExtractionChainFromZod, };