Skip to main content
Glama
intent-classifier.js6.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.intentClassifier = exports.IntentClassifier = void 0; const mutation_types_js_1 = require("./mutation-types.js"); class IntentClassifier { classify(operations, userIntent) { if (operations.length === 0) { return mutation_types_js_1.IntentClassification.UNKNOWN; } if (userIntent) { const textClassification = this.classifyFromText(userIntent); if (textClassification !== mutation_types_js_1.IntentClassification.UNKNOWN) { return textClassification; } } return this.classifyFromOperations(operations); } classifyFromText(intent) { const lowerIntent = intent.toLowerCase(); if (lowerIntent.includes('fix') || lowerIntent.includes('resolve') || lowerIntent.includes('correct') || lowerIntent.includes('repair') || lowerIntent.includes('error')) { return mutation_types_js_1.IntentClassification.FIX_VALIDATION; } if (lowerIntent.includes('add') || lowerIntent.includes('create') || lowerIntent.includes('insert') || lowerIntent.includes('new node')) { return mutation_types_js_1.IntentClassification.ADD_FUNCTIONALITY; } if (lowerIntent.includes('update') || lowerIntent.includes('change') || lowerIntent.includes('modify') || lowerIntent.includes('configure') || lowerIntent.includes('set')) { return mutation_types_js_1.IntentClassification.MODIFY_CONFIGURATION; } if (lowerIntent.includes('connect') || lowerIntent.includes('reconnect') || lowerIntent.includes('rewire') || lowerIntent.includes('reroute') || lowerIntent.includes('link')) { return mutation_types_js_1.IntentClassification.REWIRE_LOGIC; } if (lowerIntent.includes('remove') || lowerIntent.includes('delete') || lowerIntent.includes('clean') || lowerIntent.includes('disable')) { return mutation_types_js_1.IntentClassification.CLEANUP; } return mutation_types_js_1.IntentClassification.UNKNOWN; } classifyFromOperations(operations) { const opTypes = operations.map((op) => op.type); const opTypeSet = new Set(opTypes); if (opTypeSet.has('addNode') && opTypeSet.has('addConnection')) { return mutation_types_js_1.IntentClassification.ADD_FUNCTIONALITY; } if (opTypeSet.has('addNode') && !opTypeSet.has('removeNode')) { return mutation_types_js_1.IntentClassification.ADD_FUNCTIONALITY; } if (opTypeSet.has('removeNode') || opTypeSet.has('removeConnection')) { return mutation_types_js_1.IntentClassification.CLEANUP; } if (opTypeSet.has('disableNode')) { return mutation_types_js_1.IntentClassification.CLEANUP; } if (opTypeSet.has('rewireConnection') || opTypeSet.has('replaceConnections') || (opTypeSet.has('addConnection') && opTypeSet.has('removeConnection'))) { return mutation_types_js_1.IntentClassification.REWIRE_LOGIC; } if (opTypeSet.has('updateNode') && opTypes.every((t) => t === 'updateNode')) { return mutation_types_js_1.IntentClassification.MODIFY_CONFIGURATION; } if (opTypeSet.has('updateSettings') || opTypeSet.has('updateName') || opTypeSet.has('addTag') || opTypeSet.has('removeTag')) { return mutation_types_js_1.IntentClassification.MODIFY_CONFIGURATION; } if (opTypeSet.has('updateNode')) { return mutation_types_js_1.IntentClassification.MODIFY_CONFIGURATION; } if (opTypeSet.has('moveNode')) { return mutation_types_js_1.IntentClassification.MODIFY_CONFIGURATION; } if (opTypeSet.has('enableNode')) { return mutation_types_js_1.IntentClassification.FIX_VALIDATION; } if (opTypeSet.has('cleanStaleConnections')) { return mutation_types_js_1.IntentClassification.CLEANUP; } return mutation_types_js_1.IntentClassification.UNKNOWN; } getConfidence(classification, operations, userIntent) { if (userIntent && this.classifyFromText(userIntent) === classification) { return 0.9; } if (classification !== mutation_types_js_1.IntentClassification.UNKNOWN) { const opTypes = new Set(operations.map((op) => op.type)); if (classification === mutation_types_js_1.IntentClassification.ADD_FUNCTIONALITY && opTypes.has('addNode')) { return 0.8; } if (classification === mutation_types_js_1.IntentClassification.CLEANUP && (opTypes.has('removeNode') || opTypes.has('removeConnection'))) { return 0.8; } if (classification === mutation_types_js_1.IntentClassification.REWIRE_LOGIC && opTypes.has('rewireConnection')) { return 0.8; } return 0.6; } return 0.3; } getDescription(classification) { switch (classification) { case mutation_types_js_1.IntentClassification.ADD_FUNCTIONALITY: return 'Adding new nodes or functionality to the workflow'; case mutation_types_js_1.IntentClassification.MODIFY_CONFIGURATION: return 'Modifying configuration of existing nodes'; case mutation_types_js_1.IntentClassification.REWIRE_LOGIC: return 'Changing workflow execution flow by rewiring connections'; case mutation_types_js_1.IntentClassification.FIX_VALIDATION: return 'Fixing validation errors or issues'; case mutation_types_js_1.IntentClassification.CLEANUP: return 'Removing or disabling nodes and connections'; case mutation_types_js_1.IntentClassification.UNKNOWN: return 'Unknown or complex mutation pattern'; default: return 'Unclassified mutation'; } } } exports.IntentClassifier = IntentClassifier; exports.intentClassifier = new IntentClassifier(); //# sourceMappingURL=intent-classifier.js.map

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/czlonkowski/n8n-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server