UNPKG

@yogesh0333/yogiway-prompt

Version:

Free & Open Source Prompt Optimization Library - Save 30-50% on AI API costs. Multi-language, multi-platform support.

140 lines (139 loc) 4.96 kB
"use strict"; /** * Semantic-Aware Optimization * Uses pattern matching and context understanding for better optimization */ Object.defineProperty(exports, "__esModule", { value: true }); exports.detectSemanticContext = detectSemanticContext; exports.semanticOptimize = semanticOptimize; exports.applySemanticPatterns = applySemanticPatterns; /** * Detect semantic context from text */ function detectSemanticContext(text) { const lower = text.toLowerCase(); // Detect intent let intent = 'description'; if (/\?/.test(text) || /^(what|how|why|when|where|who|which)/i.test(text)) { intent = 'question'; } else if (/^(please|do|make|create|build|implement|write)/i.test(text)) { intent = 'instruction'; } else if (/```|function|class|const|let|var|import|export/.test(text)) { intent = 'code'; } else if (/^(hi|hello|hey|thanks|thank you)/i.test(text)) { intent = 'conversation'; } // Detect urgency let urgency = 'medium'; if (/\b(urgent|asap|immediately|critical|important)\b/i.test(text)) { urgency = 'high'; } else if (/\b(whenever|eventually|someday|later)\b/i.test(text)) { urgency = 'low'; } // Detect formality let formality = 'neutral'; if (/\b(please|kindly|would you|could you|I would appreciate)\b/i.test(text)) { formality = 'formal'; } else if (/\b(hey|yo|gonna|wanna|gotta)\b/i.test(text)) { formality = 'casual'; } return { intent, urgency, formality }; } /** * Semantic-aware optimization * Preserves meaning while optimizing based on context */ function semanticOptimize(text, context) { const detectedContext = context || detectSemanticContext(text); let optimized = text; // Intent-specific optimization switch (detectedContext.intent) { case 'instruction': // Remove politeness markers if not formal if (detectedContext.formality !== 'formal') { optimized = optimized.replace(/\b(please\s+|kindly\s+)/gi, ''); } // Simplify instruction verbs optimized = optimized.replace(/\b(make\s+sure\s+to|ensure\s+that\s+you)\b/gi, ''); optimized = optimized.replace(/\bI\s+would\s+like\s+to\s+request\s+that\b/gi, 'please'); break; case 'question': // Remove redundant question phrases optimized = optimized.replace(/\bI\s+was\s+wondering\s+if\s+you\s+could\s+tell\s+me\b/gi, ''); optimized = optimized.replace(/\bcan\s+you\s+please\s+tell\s+me\b/gi, ''); break; case 'description': // Remove descriptive fluff optimized = optimized.replace(/\bit\s+is\s+worth\s+noting\s+that\b/gi, ''); optimized = optimized.replace(/\bit\s+should\s+be\s+mentioned\s+that\b/gi, ''); optimized = optimized.replace(/\bplease\s+note\s+that\b/gi, ''); break; case 'conversation': // Keep conversational tone, minimal optimization optimized = optimized.replace(/\bI\s+just\s+want\s+to\s+say\s+that\b/gi, ''); break; case 'code': // Minimal optimization for code context // Only remove obvious fluff outside code blocks optimized = optimized.replace(/\bplease\s+note\s+that\b/gi, ''); break; } // Urgency-based optimization if (detectedContext.urgency === 'high') { // Remove time-wasting phrases optimized = optimized.replace(/\b(when\s+you\s+have\s+a\s+moment|at\s+your\s+convenience)\b/gi, ''); } // Formality-based optimization if (detectedContext.formality === 'casual') { // More aggressive optimization for casual text optimized = optimized.replace(/\b(I\s+think\s+that|I\s+believe\s+that)\b/gi, ''); } // Apply semantic patterns optimized = applySemanticPatterns(optimized, detectedContext); // Final cleanup - compress whitespace optimized = optimized.replace(/\s+/g, ' ').trim(); return optimized; } /** * Advanced semantic patterns */ const SEMANTIC_PATTERNS = [ // Conditional patterns [ /\bif\s+it\s+is\s+possible\b/gi, 'if possible', () => true, ], [ /\bI\s+would\s+like\s+to\s+request\s+that\b/gi, 'please', (ctx) => ctx.formality === 'formal', ], [ /\bfor\s+your\s+information\b/gi, 'FYI', () => true, ], [ /\bas\s+far\s+as\s+I\s+know\b/gi, '', (ctx) => ctx.formality !== 'formal', ], ]; /** * Apply semantic patterns based on context */ function applySemanticPatterns(text, context) { let optimized = text; SEMANTIC_PATTERNS.forEach(([pattern, replacement, condition]) => { if (condition(context)) { optimized = optimized.replace(pattern, replacement); } }); return optimized; }