mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
feat(compression): add Indonesian caveman rules and language pack (#3975)
Integrated into release/v3.8.27
This commit is contained in:
@@ -4,6 +4,7 @@ const LANGUAGE_HINTS: Record<string, RegExp[]> = {
|
|||||||
de: [/\b(?:ich|datei|fehler|bitte|kannst|konfiguration|danke)\b/i],
|
de: [/\b(?:ich|datei|fehler|bitte|kannst|konfiguration|danke)\b/i],
|
||||||
fr: [/\b(?:fichier|erreur|merci|peux|configuration|besoin)\b/i],
|
fr: [/\b(?:fichier|erreur|merci|peux|configuration|besoin)\b/i],
|
||||||
ja: [/[\u3040-\u30ff]/],
|
ja: [/[\u3040-\u30ff]/],
|
||||||
|
id: [/\b(?:saya|kamu|anda|dengan|untuk|yang|tidak|bisa|terima\s+kasih|dari)\b/i],
|
||||||
};
|
};
|
||||||
|
|
||||||
export function detectCompressionLanguage(text: string): string {
|
export function detectCompressionLanguage(text: string): string {
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ const CAVEMAN_INSTRUCTION_BY_LANGUAGE = {
|
|||||||
full: `短く圧縮して回答。断片文可。技術内容、コード、エラー、URL、識別子は正確に保持。${SHARED_BOUNDARIES}`,
|
full: `短く圧縮して回答。断片文可。技術内容、コード、エラー、URL、識別子は正確に保持。${SHARED_BOUNDARIES}`,
|
||||||
ultra: `超短く回答。DB/auth/config/req/res/fn など一般的な略語は可。コード記号、API名、エラー文字列、URL、識別子は省略しない。${SHARED_BOUNDARIES}`,
|
ultra: `超短く回答。DB/auth/config/req/res/fn など一般的な略語は可。コード記号、API名、エラー文字列、URL、識別子は省略しない。${SHARED_BOUNDARIES}`,
|
||||||
},
|
},
|
||||||
|
id: {
|
||||||
|
lite: `Jawab ringkas. Hapus pengisi, salam sopan santun, keraguan. Pertahankan istilah teknis, kode, error, URL, & identifier secara persis. ${SHARED_BOUNDARIES}`,
|
||||||
|
full: `Jawab sangat singkat ala caveman pintar. Hapus kata pengisi (hanya/sangat/sebenarnya), salam sopan santun. Kalimat pendek/tidak lengkap OK. Gunakan sinonim pendek. Pertahankan semua substansi teknis, kode, error, URL, & identifier secara persis. ${SHARED_BOUNDARIES}`,
|
||||||
|
ultra: `Jawab ultra singkat. Kompresi maksimal. Gunakan singkatan umum (DB/auth/config/req/res/fn/impl), hilangkan kata hubung, gunakan panah untuk kausalitas (X → Y). Satu kata jika cukup. Jangan singkat simbol kode, nama API, string error, URL, atau identifier. ${SHARED_BOUNDARIES}`,
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
const CAVEMAN_OUTPUT_MARKER = "[OmniRoute Caveman Output Mode]";
|
const CAVEMAN_OUTPUT_MARKER = "[OmniRoute Caveman Output Mode]";
|
||||||
|
|||||||
113
open-sse/services/compression/rules/id/context.json
Normal file
113
open-sse/services/compression/rules/id/context.json
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
{
|
||||||
|
"language": "id",
|
||||||
|
"category": "context",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"name": "id_explanatory_prefix",
|
||||||
|
"pattern": "\\b(?:fungsi\\s+ini\\s+nampaknya\\s+menangani|kode\\s+ini\\s+tampaknya|kelas\\s+ini|modul\\s+ini\\s+adalah)\\b",
|
||||||
|
"replacement": "Fungsi:",
|
||||||
|
"replacementMap": {
|
||||||
|
"fungsi ini nampaknya menangani": "Fungsi:",
|
||||||
|
"kode ini tampaknya": "Kode:",
|
||||||
|
"kelas ini": "Kelas:",
|
||||||
|
"modul ini adalah": "Modul:"
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "context",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_question_to_directive",
|
||||||
|
"pattern": "\\b(?:bisa\\s+jelaskan\\s+kenapa|bisa\\s+tunjukkan\\s+bagaimana|bisa\\s+beritahu\\s+saya|tolong\\s+beritahu\\s+ke|tolong\\s+jelasin\\s+kenapa|tolong\\s+infoin|kasih\\s+tau\\s+gimana|tunjukkan\\s+cara\\s+bagaimana|tunjukkan\\s+cara)\\b",
|
||||||
|
"replacement": "Jelaskan kenapa ",
|
||||||
|
"replacementMap": {
|
||||||
|
"bisa jelaskan kenapa": "Jelaskan kenapa ",
|
||||||
|
"bisa tunjukkan bagaimana": "Tunjukkan bagaimana ",
|
||||||
|
"bisa beritahu saya": "Beritahu saya ",
|
||||||
|
"tolong beritahu ke": "Beritahu ",
|
||||||
|
"tolong jelasin kenapa": "Jelaskan kenapa ",
|
||||||
|
"tolong infoin": "Info ",
|
||||||
|
"kasih tau gimana": "Tunjukkan bagaimana ",
|
||||||
|
"tunjukkan cara bagaimana": "Tunjukkan cara ",
|
||||||
|
"tunjukkan cara": "Tunjukkan cara "
|
||||||
|
},
|
||||||
|
"context": "user",
|
||||||
|
"category": "context",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_context_setup",
|
||||||
|
"pattern": "\\b(?:saya\\s+punya\\s+kode\\s+berikut|berikut\\s+adalah\\s+kode\\s+saya|berikut\\s+kodenya|ini\\s+kodenya|kode\\s+di\\s+bawah\\s+ini|ini\\s+filenya|berikut\\s+isi\\s+filenya|berikut\\s+isi\\s+berkasnya|berikut\\s+kodenya)\\b\\s*[:.]?\\s*",
|
||||||
|
"replacement": "Kode:",
|
||||||
|
"context": "user",
|
||||||
|
"category": "context",
|
||||||
|
"minIntensity": "lite",
|
||||||
|
"replacementMap": {
|
||||||
|
"saya punya kode berikut": "Kode:",
|
||||||
|
"berikut adalah kode saya": "Kode:",
|
||||||
|
"berikut kodenya": "Kode:",
|
||||||
|
"ini kodenya": "Kode:",
|
||||||
|
"kode di bawah ini": "Kode:",
|
||||||
|
"ini filenya": "File:",
|
||||||
|
"berikut isi filenya": "File:",
|
||||||
|
"berikut isi berkasnya": "File:"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_intent_clarification",
|
||||||
|
"pattern": "\\b(?:apa\\s+yang\\s+sedang\\s+saya\\s+coba\\s+lakukan\\s+adalah|tujuan\\s+saya\\s+adalah\\s+untuk|yang\\s+saya\\s+butuhkan\\s+adalah|saya\\s+menargetkan\\s+untuk|gw\\s+mau|gua\\s+mau|saya\\s+pengen|aku\\s+ingin)\\b\\s*",
|
||||||
|
"replacement": "Tujuan:",
|
||||||
|
"context": "user",
|
||||||
|
"category": "context",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_background_removal",
|
||||||
|
"pattern": "\\b(?:seperti\\s+yang\\s+anda\\s+ketahui|seperti\\s+yang\\s+kita\\s+diskusikan\\s+sebelumnya)\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "context",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_meta_commentary",
|
||||||
|
"pattern": "^(?:catat\\s+bahwa|perlu\\s+diingat\\s+bahwa|ingat\\s+bahwa)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "context",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_purpose_statement",
|
||||||
|
"pattern": "\\b(?:dengan\\s+tujuan\\s+untuk|dalam\\s+upaya\\s+untuk|untuk\\s+setiap)\\b",
|
||||||
|
"replacement": "untuk",
|
||||||
|
"replacementMap": {
|
||||||
|
"dengan tujuan untuk": "untuk",
|
||||||
|
"dalam upaya untuk": "untuk",
|
||||||
|
"untuk setiap": "per"
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "context",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_conversational_connectors",
|
||||||
|
"pattern": "\\b(?:pertama-tama|kedua|selanjutnya|lalu|kemudian|di\\s+samping\\s+itu|oleh\\s+karena\\s+itu|maka\\s+dari\\s+itu|dengan\\s+kata\\s+lain|sebagai\\s+catatan)\\b",
|
||||||
|
"replacementMap": {
|
||||||
|
"pertama-tama": "1.",
|
||||||
|
"kedua": "2.",
|
||||||
|
"selanjutnya": "lalu",
|
||||||
|
"lalu": ">",
|
||||||
|
"kemudian": ">",
|
||||||
|
"di samping itu": "juga",
|
||||||
|
"oleh karena itu": "jadi",
|
||||||
|
"maka dari itu": "jadi",
|
||||||
|
"dengan kata lain": "artinya",
|
||||||
|
"sebagai catatan": "catatan:"
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "context",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
38
open-sse/services/compression/rules/id/dedup.json
Normal file
38
open-sse/services/compression/rules/id/dedup.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"language": "id",
|
||||||
|
"category": "dedup",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"name": "id_repeated_context",
|
||||||
|
"pattern": "\\b(?:seperti\\s+yang\\s+kita\\s+diskusikan\\s+tadi|seperti\\s+yang\\s+disebutkan\\s+taraf\\s+awal|seperti\\s+dijelaskan\\s+sebelumnya|seperti\\s+saya\\s+katakan\\s+tadi|sebelumnya\\s+sudah\\s+saya\\s+jelaskan|seperti\\s+yang\\s+saya\\s+sebutkan\\s+tadi|seperti\\s+yang\\s+sudah\\s+dibahas|seperti\\s+yang\\s+dibilang\\s+sebelumnya)\\b[,.]?\\s*",
|
||||||
|
"replacement": "Sama seperti di atas. ",
|
||||||
|
"context": "all",
|
||||||
|
"category": "dedup",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_repeated_question",
|
||||||
|
"pattern": "\\b(?:pertanyaan\\s+yang\\s+sama\\s+seperti\\s+sebelumnya|saya\\s+tanya\\s+ini\\s+tadi|ini\\s+pertanyaan\\s+yang\\s+sama)\\b[,.]?\\s*",
|
||||||
|
"replacement": "[pertanyaan sama] ",
|
||||||
|
"context": "user",
|
||||||
|
"category": "dedup",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_reestablished_context",
|
||||||
|
"pattern": "\\b(?:kembali\\s+ke\\s+kode\\s+di\\s+atas|merujuk\\s+kembali\\s+ke|kembali\\s+ke|kembali\\s+ke\\s+pembahasan|kembali\\s+ke\\s+topik|balik\\s+lagi\\s+ke|kembali\\s+membahas)\\b\\s*",
|
||||||
|
"replacement": "Re: ",
|
||||||
|
"context": "all",
|
||||||
|
"category": "dedup",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_summary_replacement",
|
||||||
|
"pattern": "\\b(?:untuk\\s+meringkas\\s+apa\\s+yang\\s+kita\\s+bahas|ringkasan\\s+dari\\s+diskusi\\s+kita|singkatnya|singkat\\s+cerita|kesimpulannya|intisarinya)\\b[,.]?\\s*",
|
||||||
|
"replacement": "Summary: ",
|
||||||
|
"context": "assistant",
|
||||||
|
"category": "dedup",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
138
open-sse/services/compression/rules/id/filler.json
Normal file
138
open-sse/services/compression/rules/id/filler.json
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
{
|
||||||
|
"language": "id",
|
||||||
|
"category": "filler",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"name": "id_pleasantries",
|
||||||
|
"pattern": "\\b(?:terima\\s+kasih\\s+banyak|terima\\s+kasih|makasih\\s+banyak|makasih|suwun|hatur\\s+nuhun|nuhun|mohon\\s+bantuannya|tolong\\s+bantuannya|sama-sama|terima\\s+kasih\\s+kembali|kembali|sama\\s+sama|sangat\\s+membantu|senang\\s+membantu|salam\\s+hangat|semoga\\s+membantu|semoga\\s+bermanfaat|terima\\s+kasih\\s+banyak\\s+ya|makasih\\s+ya)\\b[,.!?\\s]*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_polite_framing",
|
||||||
|
"pattern": "\\b(?:mohon\\s+info|mohon|tolong|tolong\\s+dong|tlg|tolong\\s+buatkan|saya\\s+ingin\\s+meminta|saya\\s+ingin|ingin\\s+meminta|bisa\\s+tolong|tolong\\s+jelaskan|tolong\\s+tunjukkan|minta\\s+tolong|tolongin|mohon\\s+bantu|mohon\\s+bantuan)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_hedging",
|
||||||
|
"pattern": "\\b(?:sepertinya|tampaknya|mungkin|rasanya|kiranya|kurang\\s+lebih|bisa\\s+jadi|seolah-olah|seolah|kelihatannya)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_verbose_instructions",
|
||||||
|
"pattern": "\\b(?:berikan\\s+penjelasan\\s+rinci\\s+tentang|berikan\\s+penjelasan\\s+detail\\s+tentang|jelaskan\\s+secara\\s+rinci|jelaskan\\s+secara\\s+detail|tuliskan\\s+secara\\s+lengkap|secara\\s+mendetail|secara\\s+mendalam|secara\\s+rinci|secara\\s+detail)\\b\\s*",
|
||||||
|
"replacement": "jelaskan ",
|
||||||
|
"replacementMap": {
|
||||||
|
"berikan penjelasan rinci tentang": "jelaskan ",
|
||||||
|
"berikan penjelasan detail tentang": "jelaskan ",
|
||||||
|
"jelaskan secara rinci": "jelaskan ",
|
||||||
|
"jelaskan secara detail": "jelaskan ",
|
||||||
|
"tuliskan secara lengkap": "tulis ",
|
||||||
|
"secara mendetail": "",
|
||||||
|
"secara mendalam": "",
|
||||||
|
"secara rinci": "",
|
||||||
|
"secara detail": ""
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_filler_adverbs",
|
||||||
|
"pattern": "\\b(?:pada\\s+dasarnya|sebenarnya|secara\\s+harfiah|gampangnya|mudahnya|sederhananya|saat\\s+ini|sekarang|cuma|hanya)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_filler_phrases",
|
||||||
|
"pattern": "^(?:saya\\s+ingin|saya\\s+butuh|saya\\s+mau|saya\\s+sedang\\s+mencari|tujuan\\s+saya|rencana\\s+saya)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "user",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_redundant_openers",
|
||||||
|
"pattern": "^(?:halo\\s+gan|halo\\s+min|halo|hai|hi|hey|heyy|selamat\\s+pagi|selamat\\s+siang|selamat\\s+sore|selamat\\s+malam|permisi|assalamualaikum|assalamu\\'alaikum|assalamualaikum\\s+wr\\s+wb|salam\\s+sejahtera|permisi\\s+(?:kak|gan|sis|bro|mas|bang|min)|permisi\\s+semuanya|halo\\s+(?:bro|kak|sis|guys|kawan))\\b\\s*[,.!?\\s]?\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "user",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_verbose_requests",
|
||||||
|
"pattern": "\\b(?:saya\\s+penasaran\\s+apakah|apakah\\s+memungkinkan\\s+untuk|apakah\\s+bisa|apakah\\s+mungkin)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "user",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_self_reference",
|
||||||
|
"pattern": "^(?:saya|gw|gua|gue|aku|kita|ane)\\s+(?:sedang|lagi|masih)(?:\\s+(?:mencoba\\s+untuk|mengerjakan))?\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "user",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_qualifier_removal",
|
||||||
|
"pattern": "\\b(?:sedikit|agak|terkadang|kadang-kadang|kadang|semacam)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_softeners",
|
||||||
|
"pattern": "\\b(?:jika\\s+memungkinkan|kalau\\s+bisa|kalau\\s+sempat|bila\\s+berkenan|sekadar\\s+bertanya)\\b[,.!?\\s]*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_uncertainty_fillers",
|
||||||
|
"pattern": "\\b(?:saya\\s+rasa|saya\\s+kira|kurang\\s+lebih|kira-kira|kira\\s+kira)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_assistant_fillers",
|
||||||
|
"pattern": "^(?:berikut\\s+adalah|berikut|ini\\s+adalah|bawah\\s+ini\\s+adalah)\\s+",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "assistant",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_discourse_fillers",
|
||||||
|
"pattern": "\\b(?:kebetulan|sekadar|sekedar|sejujurnya|secara\\s+pribadi|rupanya|pada\\s+intinya|intinya|singkat\\s+kata|omong-omong|ngomong-ngomong|btw|fyi|asalkan|asal)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_particles_removal",
|
||||||
|
"pattern": "\\b(?:dong|deh|sih|kok|loh|lah|tah|kah|pun|tuh|si|kek|ya)\\b",
|
||||||
|
"flags": "gi",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "filler",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
111
open-sse/services/compression/rules/id/structural.json
Normal file
111
open-sse/services/compression/rules/id/structural.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"language": "id",
|
||||||
|
"category": "structural",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"name": "id_redundant_phrasing",
|
||||||
|
"pattern": "\\b(?:pastikan\\s+untuk|harus\\s+dipastikan|perlu\\s+untuk|dianjurkan\\s+untuk|disarankan\\s+untuk|wajib\\s+untuk)\\b\\s*",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "full",
|
||||||
|
"replacementMap": {
|
||||||
|
"pastikan untuk": "pastikan ",
|
||||||
|
"harus dipastikan": "pastikan ",
|
||||||
|
"perlu untuk": "perlu ",
|
||||||
|
"dianjurkan untuk": "dianjurkan ",
|
||||||
|
"disarankan untuk": "disarankan ",
|
||||||
|
"wajib untuk": "wajib "
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_redundant_because",
|
||||||
|
"pattern": "\\b(?:dikarenakan\\s+adanya\\s+fakta\\s+bahwa|alasan\\s+utamanya\\s+adalah\\s+karena|oleh\\s+karena\\s+fakta\\s+bahwa|disebabkan\\s+oleh\\s+karena|karena\\s+alasan\\s+bahwa)\\b\\s*",
|
||||||
|
"replacement": "karena ",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "full"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_redundant_directive",
|
||||||
|
"pattern": "\\b(?:penting\\s+untuk|anda\\s+seharusnya|ingat\\s+untuk)\\b\\s*",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "full"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_list_conjunction",
|
||||||
|
"pattern": ",\\s*dan\\s+juga\\s+|,\\s*serta\\s+|,\\s*maupun\\s+juga\\s*",
|
||||||
|
"replacement": ", ",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "full"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_purpose_phrases",
|
||||||
|
"pattern": "\\b(?:agar\\s+bisa\\s+untuk|supaya\\s+bisa\\s+untuk|bertujuan\\s+untuk)\\b\\s*",
|
||||||
|
"replacement": "untuk ",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_redundant_quantifiers",
|
||||||
|
"pattern": "\\b(?:masing-masing\\s+dan\\s+setiap|tiap-tiap\\s+dan\\s+setiap)\\b",
|
||||||
|
"replacement": "setiap",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "full"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_all_quantifier",
|
||||||
|
"pattern": "\\bapapun\\s+dan\\s+semua\\b",
|
||||||
|
"replacement": "semua",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "full"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_verbose_connectors",
|
||||||
|
"pattern": "\\b(?:selain\\s+itu|lebih\\s+lanjut\\s+lagi|tambahan\\s+lagi|dan\\s+juga)\\b\\s*",
|
||||||
|
"replacement": "juga ",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_transition_removal",
|
||||||
|
"pattern": "^(?:Di\\s+sisi\\s+lain,?\\s*|Sebaliknya,?\\s*|Namun,?\\s*|Akan\\s+tetapi,?\\s*)",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_emphasis_removal",
|
||||||
|
"pattern": "\\b(?:sangat|sekali|amat|luar\\s+biasa|sungguh)\\s+(?=[a-z])",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "lite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_passive_voice",
|
||||||
|
"pattern": "\\b(?:sedang\\s+digunakan|sedang\\s+dipanggil|sedang\\s+dibuat|telah\\s+dibuat|telah\\s+diterapkan|sedang\\s+dijalankan|sedang\\s+diuji|telah\\s+diimplementasikan)\\b",
|
||||||
|
"replacement": "pakai",
|
||||||
|
"replacementMap": {
|
||||||
|
"sedang digunakan": "pakai",
|
||||||
|
"sedang dipanggil": "panggil",
|
||||||
|
"sedang dibuat": "buat",
|
||||||
|
"telah dibuat": "buat",
|
||||||
|
"telah diterapkan": "terapkan",
|
||||||
|
"sedang dijalankan": "jalan",
|
||||||
|
"sedang diuji": "uji",
|
||||||
|
"telah diimplementasikan": "terapkan"
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "structural",
|
||||||
|
"minIntensity": "full"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
252
open-sse/services/compression/rules/id/ultra.json
Normal file
252
open-sse/services/compression/rules/id/ultra.json
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
{
|
||||||
|
"language": "id",
|
||||||
|
"category": "ultra",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"name": "id_articles_removal",
|
||||||
|
"pattern": "\\b(?:itu|tersebut|ini)\\s+(?=[a-z])",
|
||||||
|
"flags": "g",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "terse",
|
||||||
|
"minIntensity": "full"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_leader_phrases",
|
||||||
|
"pattern": "^(?:saya\\s+akan|saya\\s+bisa|biarkan\\s+saya|kamu\\s+bisa|kita\\s+bisa|mari|mari\\s+kita)\\s+(?=[a-z])",
|
||||||
|
"replacement": "",
|
||||||
|
"context": "all",
|
||||||
|
"category": "terse",
|
||||||
|
"minIntensity": "full"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_abbreviations",
|
||||||
|
"pattern": "\\b(?:basis\\s+data|database)\\b",
|
||||||
|
"replacement": "DB",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_config_abbreviation",
|
||||||
|
"pattern": "\\b(?:konfigurasi|pengaturan)\\b",
|
||||||
|
"replacement": "config",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_function_abbreviation",
|
||||||
|
"pattern": "\\b(?:fungsi|metode)\\b",
|
||||||
|
"replacement": "fn",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_request_abbreviation",
|
||||||
|
"pattern": "\\b(?:permintaan|request)\\b",
|
||||||
|
"replacement": "req",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_response_abbreviation",
|
||||||
|
"pattern": "\\b(?:tanggapan|respons|jawaban|response)\\b",
|
||||||
|
"replacement": "res",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_implementation_abbreviation",
|
||||||
|
"pattern": "\\b(?:implementasi|penerapan)\\b",
|
||||||
|
"replacement": "impl",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_authentication_abbreviation",
|
||||||
|
"pattern": "\\b(?:auten|autentikasi|otentikasi|authentication)\\b",
|
||||||
|
"replacement": "auth",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_authorization_abbreviation",
|
||||||
|
"pattern": "\\b(?:otorisasi|authorization)\\b",
|
||||||
|
"replacement": "authz",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_application_abbreviation",
|
||||||
|
"pattern": "\\b(?:aplikasi|program|application)\\b",
|
||||||
|
"replacement": "app",
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "id_ultra_dependency_abbreviation",
|
||||||
|
"pattern": "\\b(?:ketergantungan|depedensi|dependensi|dependencies)\\b",
|
||||||
|
"replacement": "dep",
|
||||||
|
"replacementMap": {
|
||||||
|
"ketergantungan": "dep",
|
||||||
|
"depedensi": "dep",
|
||||||
|
"dependensi": "dep",
|
||||||
|
"dependencies": "deps"
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ultra_id_common_shortenings",
|
||||||
|
"pattern": "\\b(?:yang|untuk|dengan|adalah|tidak|sebagai|dari|dan|bisa|atau|dalam|oleh|pada|sudah|belum|akan|juga|karena|setelah|sebelum|terhadap|tentang|secara|seperti|bahwa|hanya|cuma|saja|bagaimana|mengapa|kenapa|apakah|sebagaimana|agar|supaya|bahwasanya)\\b",
|
||||||
|
"flags": "gi",
|
||||||
|
"replacementMap": {
|
||||||
|
"yang": "yg",
|
||||||
|
"untuk": "utk",
|
||||||
|
"dengan": "dg",
|
||||||
|
"adalah": "=",
|
||||||
|
"tidak": "gk",
|
||||||
|
"sebagai": "sbg",
|
||||||
|
"dari": "dr",
|
||||||
|
"dan": "&",
|
||||||
|
"bisa": "bs",
|
||||||
|
"atau": "/",
|
||||||
|
"dalam": "dlm",
|
||||||
|
"oleh": "olh",
|
||||||
|
"pada": "pd",
|
||||||
|
"sudah": "sdh",
|
||||||
|
"belum": "blm",
|
||||||
|
"akan": "akn",
|
||||||
|
"juga": "jg",
|
||||||
|
"karena": "krn",
|
||||||
|
"setelah": "stlh",
|
||||||
|
"sebelum": "sblm",
|
||||||
|
"terhadap": "thd",
|
||||||
|
"tentang": "ttg",
|
||||||
|
"secara": "scr",
|
||||||
|
"seperti": "spt",
|
||||||
|
"bahwa": "bwh",
|
||||||
|
"hanya": "hnya",
|
||||||
|
"cuma": "cma",
|
||||||
|
"saja": "aja",
|
||||||
|
"bagaimana": "gmn",
|
||||||
|
"mengapa": "knp",
|
||||||
|
"kenapa": "knp",
|
||||||
|
"apakah": "apa",
|
||||||
|
"sebagaimana": "sbgmn",
|
||||||
|
"agar": "agr",
|
||||||
|
"supaya": "spya",
|
||||||
|
"bahwasanya": "bwhsnya"
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ultra_id_technical_shortenings",
|
||||||
|
"pattern": "\\b(?:informasi|parameter|argumen|variabel|nilai|alamat|nomor|jumlah|indeks|sumber|tujuan|berkas|kesalahan|pesan|pengguna|sistem|klien|server|jaringan|koneksi|pernyataan|transaksi|objek|kamus|daftar|panjang|karakter|tanggapan|autentikasi|konfigurasi)\\b",
|
||||||
|
"flags": "gi",
|
||||||
|
"replacementMap": {
|
||||||
|
"informasi": "info",
|
||||||
|
"parameter": "param",
|
||||||
|
"argumen": "arg",
|
||||||
|
"variabel": "var",
|
||||||
|
"nilai": "val",
|
||||||
|
"alamat": "addr",
|
||||||
|
"nomor": "no",
|
||||||
|
"jumlah": "qty",
|
||||||
|
"indeks": "idx",
|
||||||
|
"sumber": "src",
|
||||||
|
"tujuan": "dest",
|
||||||
|
"berkas": "file",
|
||||||
|
"kesalahan": "err",
|
||||||
|
"pesan": "msg",
|
||||||
|
"pengguna": "usr",
|
||||||
|
"sistem": "sys",
|
||||||
|
"klien": "cli",
|
||||||
|
"server": "srv",
|
||||||
|
"jaringan": "net",
|
||||||
|
"koneksi": "conn",
|
||||||
|
"pernyataan": "stmt",
|
||||||
|
"transaksi": "tx",
|
||||||
|
"objek": "obj",
|
||||||
|
"kamus": "dict",
|
||||||
|
"daftar": "list",
|
||||||
|
"panjang": "len",
|
||||||
|
"karakter": "char",
|
||||||
|
"tanggapan": "res",
|
||||||
|
"autentikasi": "auth",
|
||||||
|
"konfigurasi": "config"
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ultra_id_slang_abbreviations",
|
||||||
|
"pattern": "\\b(?:gimana|kenapa|sekarang|sebentar|cepat|langsung|tapi|terus|banget|terlalu|banyak|sedikit|masalah|tambah|kurang|mungkin|melihat|buat|buatkan|pakai|dulu|nanti|kasih|tanya|minta|tolong|kirim|simpan|kerja|selesai|eror|website|aplikasi|database|kembali|iya|oke|tidak|jangan|pengen|gua|gue|lu|ente|kamu|aku|saya)\\b",
|
||||||
|
"flags": "gi",
|
||||||
|
"replacementMap": {
|
||||||
|
"gimana": "gmn",
|
||||||
|
"kenapa": "knp",
|
||||||
|
"sekarang": "skrg",
|
||||||
|
"sebentar": "bntr",
|
||||||
|
"cepat": "cpt",
|
||||||
|
"langsung": "lsg",
|
||||||
|
"tapi": "tp",
|
||||||
|
"terus": "trus",
|
||||||
|
"banget": "bgt",
|
||||||
|
"terlalu": "trl",
|
||||||
|
"banyak": "bnyk",
|
||||||
|
"sedikit": "sdkt",
|
||||||
|
"masalah": "mslh",
|
||||||
|
"tambah": "tmbh",
|
||||||
|
"kurang": "krg",
|
||||||
|
"mungkin": "mgkn",
|
||||||
|
"melihat": "lht",
|
||||||
|
"buat": "bwt",
|
||||||
|
"buatkan": "bwt",
|
||||||
|
"pakai": "pake",
|
||||||
|
"dulu": "dlu",
|
||||||
|
"nanti": "nti",
|
||||||
|
"kasih": "ksh",
|
||||||
|
"tanya": "tny",
|
||||||
|
"minta": "mnt",
|
||||||
|
"tolong": "tlg",
|
||||||
|
"kirim": "krm",
|
||||||
|
"simpan": "smpn",
|
||||||
|
"kerja": "krj",
|
||||||
|
"selesai": "sls",
|
||||||
|
"eror": "err",
|
||||||
|
"website": "web",
|
||||||
|
"aplikasi": "app",
|
||||||
|
"database": "DB",
|
||||||
|
"kembali": "ret",
|
||||||
|
"iya": "y",
|
||||||
|
"oke": "ok",
|
||||||
|
"tidak": "gk",
|
||||||
|
"jangan": "jgn",
|
||||||
|
"pengen": "mau",
|
||||||
|
"gua": "gw",
|
||||||
|
"gue": "gw",
|
||||||
|
"lu": "lo",
|
||||||
|
"ente": "lo",
|
||||||
|
"kamu": "lo",
|
||||||
|
"aku": "gw",
|
||||||
|
"saya": "gw"
|
||||||
|
},
|
||||||
|
"context": "all",
|
||||||
|
"category": "ultra",
|
||||||
|
"minIntensity": "ultra"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,10 +9,10 @@ import {
|
|||||||
import { applyRulesToText } from "../../../open-sse/services/compression/caveman.ts";
|
import { applyRulesToText } from "../../../open-sse/services/compression/caveman.ts";
|
||||||
import { getRulesForContext } from "../../../open-sse/services/compression/cavemanRules.ts";
|
import { getRulesForContext } from "../../../open-sse/services/compression/cavemanRules.ts";
|
||||||
|
|
||||||
const LANGUAGES = ["pt-BR", "es", "de", "fr", "ja"];
|
const LANGUAGES = ["pt-BR", "es", "de", "fr", "ja", "id"];
|
||||||
|
|
||||||
describe("Caveman language packs", () => {
|
describe("Caveman language packs", () => {
|
||||||
it("ships 5 language packs with at least 15 rules each", () => {
|
it("ships 6 language packs with at least 15 rules each", () => {
|
||||||
for (const language of LANGUAGES) {
|
for (const language of LANGUAGES) {
|
||||||
const rules = loadAllRulesForLanguage(language, { refresh: true });
|
const rules = loadAllRulesForLanguage(language, { refresh: true });
|
||||||
assert.ok(rules.length >= 15, `${language} expected 15+ rules, got ${rules.length}`);
|
assert.ok(rules.length >= 15, `${language} expected 15+ rules, got ${rules.length}`);
|
||||||
@@ -37,6 +37,7 @@ describe("Caveman language packs", () => {
|
|||||||
assert.equal(detectCompressionLanguage("ich brauche diese konfiguration"), "de");
|
assert.equal(detectCompressionLanguage("ich brauche diese konfiguration"), "de");
|
||||||
assert.equal(detectCompressionLanguage("j'ai besoin de corriger cette erreur fichier"), "fr");
|
assert.equal(detectCompressionLanguage("j'ai besoin de corriger cette erreur fichier"), "fr");
|
||||||
assert.equal(detectCompressionLanguage("このコードを修正してください"), "ja");
|
assert.equal(detectCompressionLanguage("このコードを修正してください"), "ja");
|
||||||
|
assert.equal(detectCompressionLanguage("bisa tolong jelaskan tentang database ini"), "id");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("applies non-English rule packs to golden samples", () => {
|
it("applies non-English rule packs to golden samples", () => {
|
||||||
@@ -79,6 +80,20 @@ describe("Caveman language packs", () => {
|
|||||||
assert.ok(text.includes("src/auth.ts"));
|
assert.ok(text.includes("src/auth.ts"));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("applies Indonesian rules without touching technical terms", () => {
|
||||||
|
const idRules = getRulesForContext("user", "ultra", "id");
|
||||||
|
const { text } = applyRulesToText(
|
||||||
|
"Tolong berikan penjelasan detail tentang basis data dan autentikasi di src/auth.ts",
|
||||||
|
idRules
|
||||||
|
);
|
||||||
|
|
||||||
|
assert.ok(!text.toLowerCase().includes("tolong"));
|
||||||
|
assert.ok(!text.toLowerCase().includes("penjelasan detail"));
|
||||||
|
assert.ok(text.includes("DB"));
|
||||||
|
assert.ok(text.includes("auth"));
|
||||||
|
assert.ok(text.includes("src/auth.ts"));
|
||||||
|
});
|
||||||
|
|
||||||
it("builds localized output mode instructions", () => {
|
it("builds localized output mode instructions", () => {
|
||||||
const config = { enabled: true, intensity: "full" as const, autoClarity: true };
|
const config = { enabled: true, intensity: "full" as const, autoClarity: true };
|
||||||
|
|
||||||
@@ -87,5 +102,6 @@ describe("Caveman language packs", () => {
|
|||||||
assert.match(buildCavemanOutputInstruction(config, "de"), /Antworte/);
|
assert.match(buildCavemanOutputInstruction(config, "de"), /Antworte/);
|
||||||
assert.match(buildCavemanOutputInstruction(config, "fr"), /Reponds/);
|
assert.match(buildCavemanOutputInstruction(config, "fr"), /Reponds/);
|
||||||
assert.match(buildCavemanOutputInstruction(config, "ja"), /回答/);
|
assert.match(buildCavemanOutputInstruction(config, "ja"), /回答/);
|
||||||
|
assert.match(buildCavemanOutputInstruction(config, "id"), /Jawab/);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user