UNPKG

dtamind-components

Version:

DTAmindai Components

108 lines 4.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const prompts_1 = require("@langchain/core/prompts"); const postCore_1 = require("./postCore"); const handler_1 = require("../../../src/handler"); const utils_1 = require("../../../src/utils"); class POSTApiChain_Chains { constructor() { this.label = 'POST API Chain'; this.name = 'postApiChain'; this.version = 1.0; this.type = 'POSTApiChain'; this.icon = 'post.svg'; this.category = 'Chains'; this.badge = 'DEPRECATING'; this.description = 'Chain to run queries against POST API'; this.baseClasses = [this.type, ...(0, utils_1.getBaseClasses)(postCore_1.APIChain)]; this.inputs = [ { label: 'Language Model', name: 'model', type: 'BaseLanguageModel' }, { label: 'API Documentation', name: 'apiDocs', type: 'string', description: 'Description of how API works. Please refer to more <a target="_blank" href="https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/chains/api/open_meteo_docs.py">examples</a>', rows: 4 }, { label: 'Headers', name: 'headers', type: 'json', additionalParams: true, optional: true }, { label: 'URL Prompt', name: 'urlPrompt', type: 'string', description: 'Prompt used to tell LLMs how to construct the URL. Must contains {api_docs} and {question}', default: postCore_1.API_URL_RAW_PROMPT_TEMPLATE, rows: 4, additionalParams: true }, { label: 'Answer Prompt', name: 'ansPrompt', type: 'string', description: 'Prompt used to tell LLMs how to return the API response. Must contains {api_response}, {api_url}, and {question}', default: postCore_1.API_RESPONSE_RAW_PROMPT_TEMPLATE, rows: 4, additionalParams: true } ]; } async init(nodeData) { const model = nodeData.inputs?.model; const apiDocs = nodeData.inputs?.apiDocs; const headers = nodeData.inputs?.headers; const urlPrompt = nodeData.inputs?.urlPrompt; const ansPrompt = nodeData.inputs?.ansPrompt; const chain = await getAPIChain(apiDocs, model, headers, urlPrompt, ansPrompt); return chain; } async run(nodeData, input, options) { const model = nodeData.inputs?.model; const apiDocs = nodeData.inputs?.apiDocs; const headers = nodeData.inputs?.headers; const urlPrompt = nodeData.inputs?.urlPrompt; const ansPrompt = nodeData.inputs?.ansPrompt; const chain = await getAPIChain(apiDocs, model, headers, urlPrompt, ansPrompt); const loggerHandler = new handler_1.ConsoleCallbackHandler(options.logger, options?.orgId); const callbacks = await (0, handler_1.additionalCallbacks)(nodeData, options); const shouldStreamResponse = options.shouldStreamResponse; const sseStreamer = options.sseStreamer; const chatId = options.chatId; if (shouldStreamResponse) { const handler = new handler_1.CustomChainHandler(sseStreamer, chatId); const res = await chain.run(input, [loggerHandler, handler, ...callbacks]); return res; } else { const res = await chain.run(input, [loggerHandler, ...callbacks]); return res; } } } const getAPIChain = async (documents, llm, headers, urlPrompt, ansPrompt) => { const apiUrlPrompt = new prompts_1.PromptTemplate({ inputVariables: ['api_docs', 'question'], template: urlPrompt ? urlPrompt : postCore_1.API_URL_RAW_PROMPT_TEMPLATE }); const apiResponsePrompt = new prompts_1.PromptTemplate({ inputVariables: ['api_docs', 'question', 'api_url_body', 'api_response'], template: ansPrompt ? ansPrompt : postCore_1.API_RESPONSE_RAW_PROMPT_TEMPLATE }); const chain = postCore_1.APIChain.fromLLMAndAPIDocs(llm, documents, { apiUrlPrompt, apiResponsePrompt, verbose: process.env.DEBUG === 'true' ? true : false, headers: typeof headers === 'object' ? headers : headers ? JSON.parse(headers) : {} }); return chain; }; module.exports = { nodeClass: POSTApiChain_Chains }; //# sourceMappingURL=POSTApiChain.js.map