ai-rag / cv_module /src /config.py
robrtt's picture
Clean rebuild: all features fixed
02f4591
from pydantic_settings import BaseSettings
from pydantic import Field
from functools import lru_cache
from pathlib import Path
class CVSettings(BaseSettings):
# Device
device: str = Field("cpu", env="CV_DEVICE")
# CLIP
clip_model: str = Field("ViT-B-32", env="CLIP_MODEL")
clip_pretrained: str = Field("openai", env="CLIP_PRETRAINED")
# YOLO — ONNX backend (tidak pakai ultralytics)
# yolo_model field dipertahankan untuk backward compat env var, tapi tidak dipakai
# detector langsung pakai yolov5nu.onnx yang di-download ke models_cache_dir
yolo_conf_threshold: float = Field(0.25, env="YOLO_CONF")
yolo_iou_threshold: float = Field(0.45, env="YOLO_IOU")
# Image Captioning
caption_model: str = Field(
"Salesforce/blip-image-captioning-base", env="CAPTION_MODEL"
)
# OCR
ocr_engine: str = Field("tesseract", env="OCR_ENGINE")
ocr_languages: str = Field("en,id", env="OCR_LANGUAGES")
# API
api_host: str = Field("0.0.0.0", env="CV_API_HOST")
api_port: int = Field(8001, env="CV_API_PORT")
max_image_size_mb: float = Field(10.0, env="MAX_IMAGE_SIZE_MB")
# Storage
upload_dir: str = Field("./uploads", env="CV_UPLOAD_DIR")
models_cache_dir: str = Field("./model_cache", env="CV_MODELS_CACHE")
# MLflow
class Config:
env_file = ".env"
env_file_encoding = "utf-8"
def ensure_dirs(self):
for d in [self.upload_dir, self.models_cache_dir, "./logs"]:
Path(d).mkdir(parents=True, exist_ok=True)
@lru_cache()
def get_cv_settings() -> CVSettings:
s = CVSettings()
s.ensure_dirs()
return s