| 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, |
| }; |
|
|