UNPKG

@kangthink/q-engine

Version:

A question-answer generation engine that stimulates thinking

137 lines 4.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.QEngine = void 0; const types_1 = require("../types"); const PromptManager_1 = require("../prompts/PromptManager"); const transforms_1 = require("../transforms"); class QEngine { constructor(config) { this.transforms = new Map(); this.nodes = new Map(); this.edges = new Map(); this.llmProvider = config.llmProvider; this.promptManager = new PromptManager_1.PromptManager(config.promptsDirectory); // Initialize transforms this.initializeTransforms(); } initializeTransforms() { this.transforms.set(types_1.TransformMode.FIVE_W_ONE_H, new transforms_1.FiveWOneHTransform(this.llmProvider, this.promptManager)); this.transforms.set(types_1.TransformMode.SOCRATIC, new transforms_1.SocraticTransform(this.llmProvider, this.promptManager)); this.transforms.set(types_1.TransformMode.MATRIX, new transforms_1.MatrixTransform(this.llmProvider, this.promptManager)); this.transforms.set(types_1.TransformMode.SCIENTIFIC, new transforms_1.ScientificTransform(this.llmProvider, this.promptManager)); this.transforms.set(types_1.TransformMode.ANSWER, new transforms_1.AnswerTransform(this.llmProvider, this.promptManager)); } async initialize() { // Load prompts from directory if available await this.promptManager.loadFromDirectory(); } async transform(sourceNode, mode, options) { const transform = this.transforms.get(mode); if (!transform) { throw new Error(`Transform mode not supported: ${mode}`); } const context = { sourceNode, mode, options, }; const result = await transform.transform(context); // Store nodes and edges this.nodes.set(sourceNode.id, sourceNode); this.nodes.set(result.targetNode.id, result.targetNode); this.edges.set(result.edge.id, result.edge); return result; } async transformMultiple(sourceNode, mode, options) { const transform = this.transforms.get(mode); if (!transform) { throw new Error(`Transform mode not supported: ${mode}`); } if (!transform.transformMultiple) { throw new Error(`Multiple transform not supported for mode: ${mode}`); } const context = { sourceNode, mode, options, }; const result = await transform.transformMultiple(context); // Store nodes and edges this.nodes.set(sourceNode.id, sourceNode); result.targetNodes.forEach(node => { this.nodes.set(node.id, node); }); result.edges.forEach(edge => { this.edges.set(edge.id, edge); }); return result; } async transformChain(sourceNode, modes, options) { const results = []; let currentNode = sourceNode; for (let i = 0; i < modes.length; i++) { const mode = modes[i]; const modeOptions = options?.[i] || {}; const result = await this.transform(currentNode, mode, modeOptions); results.push(result); currentNode = result.targetNode; } return results; } getNode(id) { return this.nodes.get(id); } getEdge(id) { return this.edges.get(id); } getAllNodes() { return Array.from(this.nodes.values()); } getAllEdges() { return Array.from(this.edges.values()); } getNodesByType(type) { return this.getAllNodes().filter(node => node.type === type); } getEdgesByTransform(transform) { return this.getAllEdges().filter(edge => edge.transform === transform); } getConnectedNodes(nodeId) { const incoming = []; const outgoing = []; for (const edge of this.edges.values()) { if (edge.to === nodeId) { const fromNode = this.nodes.get(edge.from); if (fromNode) incoming.push(fromNode); } if (edge.from === nodeId) { const toNode = this.nodes.get(edge.to); if (toNode) outgoing.push(toNode); } } return { incoming, outgoing }; } exportGraph() { return { nodes: this.getAllNodes(), edges: this.getAllEdges(), }; } importGraph(data) { // Clear existing data this.nodes.clear(); this.edges.clear(); // Import nodes for (const node of data.nodes) { this.nodes.set(node.id, node); } // Import edges for (const edge of data.edges) { this.edges.set(edge.id, edge); } } } exports.QEngine = QEngine; //# sourceMappingURL=QEngine.js.map