UNPKG

@yogesh0333/yogiway-prompt

Version:

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

237 lines (236 loc) 7.81 kB
"use strict"; /** * Multi-Language Optimization Rules * Language-specific optimization patterns and rules */ Object.defineProperty(exports, "__esModule", { value: true }); exports.detectLanguage = detectLanguage; exports.getLanguageRules = getLanguageRules; exports.optimizeForLanguage = optimizeForLanguage; /** * Language-specific optimization rules */ const LANGUAGE_RULES = { en: { redundantPhrases: [ /\bplease\s+note\s+that\b/gi, /\bit\s+is\s+important\s+to\s+note\s+that\b/gi, /\bas\s+you\s+can\s+see\b/gi, /\bin\s+order\s+to\b/gi, /\bfor\s+the\s+purpose\s+of\b/gi, ], verbosePatterns: [ [/\bwith\s+regard\s+to\b/gi, 'about'], [/\bat\s+the\s+present\s+time\b/gi, 'now'], [/\bin\s+the\s+event\s+that\b/gi, 'if'], ], fillerWords: /\b(um|uh|like|you know|I mean)\b/gi, whitespaceRules: { compressMultipleSpaces: true, compressNewlines: true, }, }, es: { redundantPhrases: [ /\bpor\s+favor\s+tenga\s+en\s+cuenta\s+que\b/gi, /\bes\s+importante\s+notar\s+que\b/gi, /\bcomo\s+puede\s+ver\b/gi, ], verbosePatterns: [ [/\bcon\s+respecto\s+a\b/gi, 'sobre'], [/\ben\s+este\s+momento\b/gi, 'ahora'], [/\ben\s+el\s+caso\s+de\s+que\b/gi, 'si'], ], fillerWords: /\b(eh|este|o sea|bueno)\b/gi, whitespaceRules: { compressMultipleSpaces: true, compressNewlines: true, }, }, fr: { redundantPhrases: [ /\bveuillez\s+noter\s+que\b/gi, /\bil\s+est\s+important\s+de\s+noter\s+que\b/gi, /\bcomme\s+vous\s+pouvez\s+le\s+voir\b/gi, ], verbosePatterns: [ [/\ben\s+ce\s+qui\s+concerne\b/gi, 'sur'], [/\bà\s+l'heure\s+actuelle\b/gi, 'maintenant'], [/\bdans\s+le\s+cas\s+où\b/gi, 'si'], ], fillerWords: /\b(euh|alors|ben|voilà)\b/gi, whitespaceRules: { compressMultipleSpaces: true, compressNewlines: true, }, }, de: { redundantPhrases: [ /\bbitte\s+beachten\s+Sie\s+dass\b/gi, /\bes\s+ist\s+wichtig\s+zu\s+bemerken\s+dass\b/gi, ], verbosePatterns: [ [/\bbezüglich\b/gi, 'über'], [/\bzu\s+diesem\s+Zeitpunkt\b/gi, 'jetzt'], [/\bfalls\b/gi, 'wenn'], ], fillerWords: /\b(äh|ähm|also)\b/gi, whitespaceRules: { compressMultipleSpaces: true, compressNewlines: true, }, }, it: { redundantPhrases: [ /\bper\s+favore\s+notare\s+che\b/gi, /\bè\s+importante\s+notare\s+che\b/gi, ], verbosePatterns: [ [/\bper\s+quanto\s+riguarda\b/gi, 'su'], [/\bin\s+questo\s+momento\b/gi, 'ora'], ], fillerWords: /\b(ehm|allora|cioè)\b/gi, whitespaceRules: { compressMultipleSpaces: true, compressNewlines: true, }, }, pt: { redundantPhrases: [ /\bpor\s+favor\s+note\s+que\b/gi, /\bé\s+importante\s+notar\s+que\b/gi, ], verbosePatterns: [ [/\bcom\s+relação\s+a\b/gi, 'sobre'], [/\bneste\s+momento\b/gi, 'agora'], ], fillerWords: /\b(é|tipo|assim)\b/gi, whitespaceRules: { compressMultipleSpaces: true, compressNewlines: true, }, }, ru: { redundantPhrases: [ /\bпожалуйста\s+обратите\s+внимание\s+что\b/gi, /\bважно\s+отметить\s+что\b/gi, ], verbosePatterns: [ [/\bотносительно\b/gi, 'о'], [/\bв\s+данный\s+момент\b/gi, 'сейчас'], ], fillerWords: /\b(э|ээ|ну|вот)\b/gi, whitespaceRules: { compressMultipleSpaces: true, compressNewlines: true, }, }, zh: { redundantPhrases: [ /\b请注意\b/gi, /\b重要的是要注意\b/gi, ], verbosePatterns: [ [/\b关于\b/gi, ''], [/\b目前\b/gi, '现在'], ], fillerWords: /\b(嗯|那个|就是)\b/gi, whitespaceRules: { compressMultipleSpaces: false, // Chinese doesn't use spaces compressNewlines: true, }, }, ja: { redundantPhrases: [ /\bご注意ください\b/gi, /\b重要な点は\b/gi, ], verbosePatterns: [ [/\bに関して\b/gi, 'について'], [/\b現時点で\b/gi, '今'], ], fillerWords: /\b(えー|あの|その)\b/gi, whitespaceRules: { compressMultipleSpaces: false, // Japanese doesn't use spaces compressNewlines: true, }, }, ko: { redundantPhrases: [ /\b참고하시기\s+바랍니다\b/gi, /\b중요한\s+점은\b/gi, ], verbosePatterns: [ [/\b관련하여\b/gi, ''], [/\b현재\s+시점에서\b/gi, '지금'], ], fillerWords: /\b(음|그|어)\b/gi, whitespaceRules: { compressMultipleSpaces: true, compressNewlines: true, }, }, }; /** * Detect language from text (simple heuristic) */ function detectLanguage(text) { // Simple character-based detection if (/[\u4e00-\u9fff]/.test(text)) return 'zh'; if (/[\u3040-\u309f\u30a0-\u30ff]/.test(text)) return 'ja'; if (/[\uac00-\ud7a3]/.test(text)) return 'ko'; if (/[\u0400-\u04ff]/.test(text)) return 'ru'; // Word-based detection for European languages const words = text.toLowerCase().split(/\s+/); const esWords = ['el', 'la', 'de', 'que', 'y', 'en', 'un', 'es', 'se', 'no']; const frWords = ['le', 'de', 'et', 'à', 'un', 'il', 'être', 'et', 'en', 'avoir']; const deWords = ['der', 'die', 'und', 'in', 'den', 'von', 'zu', 'das', 'mit', 'sich']; const itWords = ['il', 'di', 'che', 'e', 'la', 'per', 'un', 'in', 'una', 'è']; const ptWords = ['o', 'de', 'e', 'do', 'da', 'em', 'um', 'para', 'é', 'com']; if (words.some(w => esWords.includes(w))) return 'es'; if (words.some(w => frWords.includes(w))) return 'fr'; if (words.some(w => deWords.includes(w))) return 'de'; if (words.some(w => itWords.includes(w))) return 'it'; if (words.some(w => ptWords.includes(w))) return 'pt'; return 'en'; // Default to English } /** * Get optimization rules for a language */ function getLanguageRules(language) { return LANGUAGE_RULES[language] || LANGUAGE_RULES.en; } /** * Apply language-specific optimization */ function optimizeForLanguage(text, language = 'en') { const rules = getLanguageRules(language); let optimized = text; // Remove redundant phrases rules.redundantPhrases.forEach(pattern => { optimized = optimized.replace(pattern, ''); }); // Replace verbose patterns rules.verbosePatterns.forEach(([pattern, replacement]) => { optimized = optimized.replace(pattern, replacement); }); // Remove filler words optimized = optimized.replace(rules.fillerWords, ''); // Apply whitespace rules if (rules.whitespaceRules.compressMultipleSpaces) { optimized = optimized.replace(/\s+/g, ' '); } if (rules.whitespaceRules.compressNewlines) { optimized = optimized.replace(/\n\s*\n\s*\n/g, '\n\n'); } return optimized.trim(); }