Skip to main content
Glama
processor.ts4.44 kB
import { AIIntent, AIContext, AIConfidence, AIError } from '../types/index.js'; import { EntityExtractor } from './entity-extractor.js'; import { IntentClassifier } from './intent-classifier.js'; import { ContextAnalyzer } from './context-analyzer.js'; export class NLPProcessor { private entityExtractor: EntityExtractor; private intentClassifier: IntentClassifier; private contextAnalyzer: ContextAnalyzer; constructor() { this.entityExtractor = new EntityExtractor(); this.intentClassifier = new IntentClassifier(); this.contextAnalyzer = new ContextAnalyzer(); } async processCommand( input: string, context: AIContext ): Promise<{ intent: AIIntent; confidence: AIConfidence; error?: AIError; }> { try { // Extract entities from the input const entities = await this.entityExtractor.extract(input); // Classify the intent const intent = await this.intentClassifier.classify(input, entities); // Analyze context relevance const contextRelevance = await this.contextAnalyzer.analyze(intent, context); // Calculate confidence scores const confidence: AIConfidence = { overall: (intent.confidence + entities.confidence + contextRelevance.confidence) / 3, intent: intent.confidence, entities: entities.confidence, context: contextRelevance.confidence }; // Create structured intent const structuredIntent: AIIntent = { action: intent.action, target: entities.primary_target, parameters: { ...entities.parameters, ...intent.parameters, context_parameters: contextRelevance.relevant_params }, raw_input: input }; return { intent: structuredIntent, confidence }; } catch (error: unknown) { const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; return { intent: { action: 'error', target: 'system', parameters: {}, raw_input: input }, confidence: { overall: 0, intent: 0, entities: 0, context: 0 }, error: { code: 'NLP_PROCESSING_ERROR', message: errorMessage, suggestion: 'Please try rephrasing your command', recovery_options: [ 'Use simpler language', 'Break down the command into smaller parts', 'Specify the target device explicitly' ], context } }; } } async validateIntent( intent: AIIntent, confidence: AIConfidence, threshold = 0.7 ): Promise<boolean> { return ( confidence.overall >= threshold && confidence.intent >= threshold && confidence.entities >= threshold && confidence.context >= threshold ); } async suggestCorrections( input: string, error: AIError ): Promise<string[]> { // Implement correction suggestions based on the error const suggestions: string[] = []; if (error.code === 'ENTITY_NOT_FOUND') { suggestions.push( 'Try specifying the device name more clearly', 'Use the exact device name from your Home Assistant setup' ); } if (error.code === 'AMBIGUOUS_INTENT') { suggestions.push( 'Please specify what you want to do with the device', 'Use action words like "turn on", "set", "adjust"' ); } if (error.code === 'CONTEXT_MISMATCH') { suggestions.push( 'Specify the location if referring to a device', 'Clarify which device you mean in the current context' ); } return suggestions; } }

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/tevonsb/homeassistant-mcp'

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