Prompt-Builder / src /core /config.py
ArielJoe's picture
feat: cross-detector language policy + tidy structure & file naming
5ddfd1f
Raw
History Blame Contribute Delete
2.59 kB
"""
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)