@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
JavaScript
;
/**
* 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;
}