""" sidecar/config.py — Centralised configuration for the GenAI Shield Sidecar. All runtime behaviour is controlled via environment variables. Defaults are safe for local development. """ import os # ── Sidecar server ──────────────────────────────────────────────────────────── SIDECAR_HOST = os.getenv("SIDECAR_HOST", "0.0.0.0") SIDECAR_PORT = int(os.getenv("SIDECAR_PORT", "5050")) # ── LLM backend ─────────────────────────────────────────────────────────────── LLM_BACKEND = os.getenv("LLM_BACKEND", "gemini") # "gemini" | "openai" GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "") GEMINI_MODEL = os.getenv("GEMINI_MODEL", "gemini-3.1-flash-lite") OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1") OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini") # ── System prompt ───────────────────────────────────────────────────────────── SYSTEM_PROMPT = os.getenv( "GENAI_SYSTEM_PROMPT", "You are a helpful AI assistant. Be concise, accurate, and professional.", ) # ── Shield thresholds ───────────────────────────────────────────────────────── GUARD_BLOCK_THRESHOLD = float(os.getenv("GUARD_BLOCK_THRESHOLD", "0.85")) GUARD_FLAG_THRESHOLD = float(os.getenv("GUARD_FLAG_THRESHOLD", "0.50")) MONITOR_BLOCK_THRESHOLD = int(os.getenv("MONITOR_BLOCK_THRESHOLD", "40")) # ── Gate behaviour ──────────────────────────────────────────────────────────── # Max ms to wait for guard verdict before letting buffered tokens through anyway # (safety valve — guard should always be <300ms in practice) GATE_GUARD_TIMEOUT_SEC = float(os.getenv("GATE_GUARD_TIMEOUT_SEC", "3.0")) # ── Post-monitor thread pool ────────────────────────────────────────────────── MONITOR_WORKERS = int(os.getenv("MONITOR_WORKERS", "4")) # ── Sentence splitter ───────────────────────────────────────────────────────── # Minimum characters before a sentence boundary is declared SENTENCE_MIN_CHARS = int(os.getenv("SENTENCE_MIN_CHARS", "20")) # ── Model path ──────────────────────────────────────────────────────────────── PROMPT_GUARD_MODEL_DIR = os.getenv( "PROMPT_GUARD_MODEL_DIR", "models/Llama-Prompt-Guard-2-86M", ) # ── Logging ─────────────────────────────────────────────────────────────────── LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")