""" Konfigurasi global lintas-modul. Berkas ini hanya menampung pengaturan yang dipakai lebih dari satu modul atau yang berkaitan dengan deployment dan kalibrasi: - mode produksi dan parameter server, - batas ukuran permintaan, - ambang confidence yang akan dikalibrasi pada tahap evaluasi. Konstanta yang hanya dipakai oleh satu detektor tetap berada di modul detektor masing-masing agar kohesinya terjaga. """ from __future__ import annotations import os def _env_flag(name: str, default: bool = False) -> bool: """Baca environment variable boolean. Nilai "1", "true", "yes" berarti True.""" value = os.environ.get(name) if value is None: return default return value.strip().lower() in {"1", "true", "yes", "on"} # Mode Produksi # # Diaktifkan dengan environment variable PROMPT_BUILDER_ENV=production. # Pada mode produksi: auto-reload dimatikan, sub-server halaman test tidak # dijalankan, dan header CORS tidak dikirim karena frontend satu origin. IS_PRODUCTION: bool = os.environ.get("PROMPT_BUILDER_ENV", "development").strip().lower() == "production" # Mengizinkan override manual bila diperlukan pada lingkungan khusus. ENABLE_AUTO_RELOAD: bool = _env_flag("PROMPT_BUILDER_AUTO_RELOAD", default=not IS_PRODUCTION) ENABLE_TEST_SUBSERVERS: bool = _env_flag("PROMPT_BUILDER_TEST_SERVERS", default=not IS_PRODUCTION) ENABLE_CORS: bool = _env_flag("PROMPT_BUILDER_CORS", default=not IS_PRODUCTION) # Parameter Server # Batas ukuran body permintaan dalam byte. Prompt normal hanya beberapa KB. MAX_BODY_BYTES: int = 1_000_000 # Profanity Layer 2 — classifier toksisitas pre-trained Indonesia (opsional). # Model dapat diganti; bila gagal dimuat, sistem otomatis kembali ke leksikon saja. PROFANITY_ML_MODEL: str = "Exqrch/IndoBERTweet-HateSpeech" PROFANITY_ML_THRESHOLD: float = 0.85 # Word Quality Layer 2 — penyaring typo kontekstual (fill-mask IndoBERT, opsional). # Menggugurkan typo false positive bila kata asli masuk akal pada konteks. WORD_QUALITY_ML_MODEL: str = "indolem/indobert-base-uncased" WORD_QUALITY_ML_TOPK: int = 20 # Field-Fit — deteksi salah-field lintas field via kemiripan embedding. # Model embedding kalimat multibahasa; bila gagal dimuat, Field-Fit tidak # mengeluarkan temuan. Aktif secara default; dimatikan oleh --fast. FIELDFIT_ML_MODEL: str = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2" FIELDFIT_ML_COS_MIN: float = 0.50 # kemiripan minimum agar layak dipertimbangkan (dinaikkan dari 0.45) FIELDFIT_ML_MARGIN: float = 0.18 # selisih minimum field teratas vs field saat ini (dinaikkan dari 0.12)