feat(compression): add Indonesian caveman rules and language pack (#3975)

Integrated into release/v3.8.27
This commit is contained in:
Veier04
2026-06-16 19:12:35 +07:00
committed by GitHub
parent 7509a32e9d
commit c9b5b1a892
8 changed files with 676 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ const LANGUAGE_HINTS: Record<string, RegExp[]> = {
de: [/\b(?:ich|datei|fehler|bitte|kannst|konfiguration|danke)\b/i],
fr: [/\b(?:fichier|erreur|merci|peux|configuration|besoin)\b/i],
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 {

View File

@@ -59,6 +59,11 @@ const CAVEMAN_INSTRUCTION_BY_LANGUAGE = {
full: `短く圧縮して回答。断片文可。技術内容、コード、エラー、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;
const CAVEMAN_OUTPUT_MARKER = "[OmniRoute Caveman Output Mode]";

View 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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View File

@@ -9,10 +9,10 @@ import {
import { applyRulesToText } from "../../../open-sse/services/compression/caveman.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", () => {
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) {
const rules = loadAllRulesForLanguage(language, { refresh: true });
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("j'ai besoin de corriger cette erreur fichier"), "fr");
assert.equal(detectCompressionLanguage("このコードを修正してください"), "ja");
assert.equal(detectCompressionLanguage("bisa tolong jelaskan tentang database ini"), "id");
});
it("applies non-English rule packs to golden samples", () => {
@@ -79,6 +80,20 @@ describe("Caveman language packs", () => {
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", () => {
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, "fr"), /Reponds/);
assert.match(buildCavemanOutputInstruction(config, "ja"), /回答/);
assert.match(buildCavemanOutputInstruction(config, "id"), /Jawab/);
});
});