Spaces:
Sleeping
Sleeping
Download app/config.py from NOT-OMEGA/SentinelAI: direct link, hf CLI and curl.
- Browser
- Download file 7.4 kB
-
https://huggingface.co/spaces/NOT-OMEGA/SentinelAI/resolve/main/app/config.py
- Command line
-
hf download hf://spaces/NOT-OMEGA/SentinelAI/app/config.py
-
curl -L -o config.py https://huggingface.co/spaces/NOT-OMEGA/SentinelAI/resolve/main/app/config.py
7.4 kB
| """ | |
| config.py — Central configuration for SentinelAI-RAG. | |
| All environment variables, thresholds, pricing, and SLA timeouts. | |
| """ | |
| import os | |
| from pathlib import Path | |
| # ───────────────────────────────────────────────── | |
| # Paths | |
| # ───────────────────────────────────────────────── | |
| PROJECT_ROOT = Path(__file__).resolve().parent.parent | |
| DATA_DIR = PROJECT_ROOT / "data" | |
| PDF_PATH = DATA_DIR / "novapay_enterprise_rag_corpus.pdf" | |
| # ───────────────────────────────────────────────── | |
| # Embedding Model | |
| # ───────────────────────────────────────────────── | |
| EMBEDDING_MODEL_NAME = os.getenv("EMBEDDING_MODEL", "all-MiniLM-L6-v2") | |
| EMBEDDING_DIM = int(os.getenv("EMBEDDING_DIM", "384")) | |
| EMBEDDING_BATCH_SIZE = int(os.getenv("EMBEDDING_BATCH_SIZE", "32")) | |
| # ───────────────────────────────────────────────── | |
| # RAG Pipeline | |
| # ───────────────────────────────────────────────── | |
| CHUNK_SIZE = int(os.getenv("CHUNK_SIZE", "512")) | |
| CHUNK_OVERLAP = int(os.getenv("CHUNK_OVERLAP", "64")) | |
| RAG_TOP_K = int(os.getenv("RAG_TOP_K", "5")) | |
| RAG_SIMILARITY_THRESHOLD = float(os.getenv("RAG_SIMILARITY_THRESHOLD", "0.25")) | |
| # ───────────────────────────────────────────────── | |
| # Semantic Cache | |
| # ───────────────────────────────────────────────── | |
| CACHE_SIMILARITY_THRESHOLD = float(os.getenv("CACHE_SIMILARITY_THRESHOLD", "0.75")) | |
| CACHE_MAX_ENTRIES = int(os.getenv("CACHE_MAX_ENTRIES", "10000")) | |
| CACHE_TTL_SECONDS = int(os.getenv("CACHE_TTL_SECONDS", "3600")) | |
| # ───────────────────────────────────────────────── | |
| # LLM Provider Configuration | |
| # ───────────────────────────────────────────────── | |
| OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") | |
| OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini") | |
| OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1") | |
| GROQ_API_KEY = os.getenv("GROQ_API_KEY", "") | |
| GROQ_MODEL = os.getenv("GROQ_MODEL", "openai/gpt-oss-120b") | |
| GROQ_BASE_URL = os.getenv("GROQ_BASE_URL", "https://api.groq.com/openai/v1") | |
| # Deterministic Local Simulator (always-available fallback) | |
| USE_LOCAL_SIMULATOR = os.getenv("USE_LOCAL_SIMULATOR", "true").lower() == "true" | |
| # ───────────────────────────────────────────────── | |
| # LLM Pricing (per 1M tokens, USD) | |
| # ───────────────────────────────────────────────── | |
| LLM_PRICING = { | |
| "gpt-4o-mini": {"input": 0.15, "output": 0.60}, | |
| "gpt-4o": {"input": 5.00, "output": 15.00}, | |
| "gpt-4-turbo": {"input": 10.00, "output": 30.00}, | |
| "llama-3.3-70b-versatile": {"input": 0.59, "output": 0.79}, | |
| "llama-3.1-70b-versatile": {"input": 0.59, "output": 0.79}, | |
| "llama-3.1-8b-instant": {"input": 0.05, "output": 0.08}, | |
| "mixtral-8x7b-32768": {"input": 0.24, "output": 0.24}, | |
| "openai/gpt-oss-120b": {"input": 0.50, "output": 0.80}, | |
| "deterministic-rag-synth-v1": {"input": 0.0, "output": 0.0}, | |
| "local-simulator": {"input": 0.0, "output": 0.0}, | |
| } | |
| # Average tokens per query/response (for cost estimation) | |
| AVG_INPUT_TOKENS = int(os.getenv("AVG_INPUT_TOKENS", "800")) | |
| AVG_OUTPUT_TOKENS = int(os.getenv("AVG_OUTPUT_TOKENS", "300")) | |
| LLM_MAX_TOKENS = int(os.getenv("LLM_MAX_TOKENS", "1200")) | |
| # ───────────────────────────────────────────────── | |
| # Guardrails | |
| # ───────────────────────────────────────────────── | |
| PII_REDACTION_ENABLED = os.getenv("PII_REDACTION_ENABLED", "true").lower() == "true" | |
| PROMPT_INJECTION_ENABLED = os.getenv("PROMPT_INJECTION_ENABLED", "true").lower() == "true" | |
| OUTPUT_GUARD_ENABLED = os.getenv("OUTPUT_GUARD_ENABLED", "true").lower() == "true" | |
| # ───────────────────────────────────────────────── | |
| # Rate Limiting | |
| # ───────────────────────────────────────────────── | |
| RATE_LIMIT_REQUESTS_PER_MINUTE = int(os.getenv("RATE_LIMIT_RPM", "60")) | |
| RATE_LIMIT_TOKENS_PER_MINUTE = int(os.getenv("RATE_LIMIT_TPM", "100000")) | |
| RATE_LIMIT_BURST = int(os.getenv("RATE_LIMIT_BURST", "10")) | |
| # ───────────────────────────────────────────────── | |
| # Circuit Breaker | |
| # ───────────────────────────────────────────────── | |
| CB_FAILURE_THRESHOLD = int(os.getenv("CB_FAILURE_THRESHOLD", "5")) | |
| CB_RECOVERY_TIMEOUT = float(os.getenv("CB_RECOVERY_TIMEOUT", "30.0")) | |
| CB_HALF_OPEN_MAX_CALLS = int(os.getenv("CB_HALF_OPEN_MAX_CALLS", "3")) | |
| CB_WINDOW_SIZE = int(os.getenv("CB_WINDOW_SIZE", "60")) | |
| # ───────────────────────────────────────────────── | |
| # Redis | |
| # ───────────────────────────────────────────────── | |
| REDIS_URL = os.getenv("REDIS_URL", "redis://localhost:6379/0") | |
| REDIS_ENABLED = os.getenv("REDIS_ENABLED", "false").lower() == "true" | |
| # ───────────────────────────────────────────────── | |
| # SLA & Timeouts | |
| # ───────────────────────────────────────────────── | |
| SLA_P99_LATENCY_MS = float(os.getenv("SLA_P99_LATENCY_MS", "2000.0")) | |
| LLM_REQUEST_TIMEOUT = float(os.getenv("LLM_REQUEST_TIMEOUT", "30.0")) | |
| HEALTH_CHECK_INTERVAL = float(os.getenv("HEALTH_CHECK_INTERVAL", "10.0")) | |
| # ───────────────────────────────────────────────── | |
| # Server | |
| # ───────────────────────────────────────────────── | |
| SERVER_HOST = os.getenv("SERVER_HOST", "0.0.0.0") | |
| SERVER_PORT = int(os.getenv("PORT", os.getenv("SERVER_PORT", "7860"))) | |
| SERVER_WORKERS = int(os.getenv("SERVER_WORKERS", "1")) | |
| LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO") | |