"""settings.py - 임베딩 서비스 공용 설정 (server/client 양쪽에서 참조).

하드코딩 금지 원칙에 따라 모든 값은 환경변수로 override 가능하며,
기본값은 이 파일 한 곳에서만 정의합니다.
"""

from __future__ import annotations

import os

# 모델 (HF 캐시에 이미 존재: models--jhgan--ko-sroberta-multitask)
MODEL_NAME: str = os.environ.get("ANU_EMBEDDING_MODEL", "jhgan/ko-sroberta-multitask")

# 출력 차원 — 불변식. 이 값과 다르면 fail-closed.
EMBEDDING_DIM: int = int(os.environ.get("ANU_EMBEDDING_DIM", "768"))

# 디바이스 — 이 머신 GPU는 sm_61 이고 설치된 torch 2.10 은 sm_70+ 만 지원하므로
# CUDA 커널이 없다. 반드시 cpu 를 사용한다. (GPU 사용 금지)
DEVICE: str = os.environ.get("ANU_EMBEDDING_DEVICE", "cpu")

# HTTP 바인딩 (8200=whisper, 8100=사용중, 8300=임베딩)
# 기본값은 루프백. 소비자가 전부 로컬(인슈위키 파이프라인/재색인 스크립트)이고
# 인증 계층이 없으므로 외부 인터페이스(Tailscale 포함) 노출을 기본에서 차단한다.
# 노출이 꼭 필요하면 ANU_EMBEDDING_HOST 로 명시 override 할 것.
HOST: str = os.environ.get("ANU_EMBEDDING_HOST", "127.0.0.1")
PORT: int = int(os.environ.get("ANU_EMBEDDING_PORT", "8300"))

# 클라이언트가 접속할 base URL
CLIENT_BASE_URL: str = os.environ.get("ANU_EMBEDDING_URL", f"http://127.0.0.1:{PORT}")

# 입력 검증 한도
MAX_TEXT_CHARS: int = int(os.environ.get("ANU_EMBEDDING_MAX_CHARS", "8000"))
MAX_BATCH_SIZE: int = int(os.environ.get("ANU_EMBEDDING_MAX_BATCH", "256"))

# 클라이언트 타임아웃(초)
CLIENT_TIMEOUT: float = float(os.environ.get("ANU_EMBEDDING_TIMEOUT", "120"))
