Spaces:
Running
Running
| # ============================================================ | |
| # app/config.py – Configuration Management (Pydantic v2) | |
| # ============================================================ | |
| from pydantic_settings import BaseSettings | |
| from typing import List | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| class Settings(BaseSettings): | |
| """Application settings from environment variables""" | |
| # ------------------------------------------------------------------ | |
| # Core App | |
| # ------------------------------------------------------------------ | |
| APP_NAME: str = "Lojiz Platform + Aida AI" | |
| APP_VERSION: str = "1.0.0" | |
| DEBUG: bool = os.getenv("DEBUG", "False").lower() == "true" | |
| ENVIRONMENT: str = os.getenv("ENVIRONMENT", "development") | |
| # ------------------------------------------------------------------ | |
| # Server | |
| # ------------------------------------------------------------------ | |
| SERVER_HOST: str = os.getenv("SERVER_HOST", "0.0.0.0") | |
| SERVER_PORT: int = int(os.getenv("SERVER_PORT", "8000")) | |
| # ------------------------------------------------------------------ | |
| # CORS | |
| # ------------------------------------------------------------------ | |
| CORS_ORIGINS: List[str] = [ | |
| "http://localhost:3000", | |
| "http://localhost:5173", | |
| "http://localhost:8080", | |
| "http://127.0.0.1:3000", | |
| "http://127.0.0.1:5173", | |
| os.getenv("FRONTEND_URL", "http://localhost:3000"), | |
| ] | |
| # ------------------------------------------------------------------ | |
| # MongoDB | |
| # ------------------------------------------------------------------ | |
| MONGODB_URL: str = os.getenv("MONGODB_URL", "mongodb://localhost:27017") | |
| MONGODB_DATABASE: str = os.getenv("MONGODB_DATABASE", "lojiz") | |
| # ------------------------------------------------------------------ | |
| # JWT | |
| # ------------------------------------------------------------------ | |
| JWT_SECRET: str = os.getenv("JWT_SECRET", "your-super-secret-key-change-in-production") | |
| JWT_ALGORITHM: str = "HS256" | |
| JWT_LOGIN_EXPIRY_DAYS: int = 60 | |
| JWT_RESET_EXPIRY_MINUTES: int = 10 | |
| # ------------------------------------------------------------------ | |
| # OTP | |
| # ------------------------------------------------------------------ | |
| OTP_EXPIRY_MINUTES: int = 15 | |
| OTP_MAX_ATTEMPTS: int = 5 | |
| OTP_LENGTH: int = 4 | |
| # ------------------------------------------------------------------ | |
| # Email (Resend) | |
| # ------------------------------------------------------------------ | |
| RESEND_API_KEY: str = os.getenv("RESEND_API_KEY", "") | |
| RESEND_FROM_EMAIL: str = os.getenv("RESEND_FROM_EMAIL", "noreply@lojiz.com") | |
| RESEND_FROM_NAME: str = "Lojiz" | |
| # ------------------------------------------------------------------ | |
| # Password Hashing | |
| # ------------------------------------------------------------------ | |
| BCRYPT_ROUNDS: int = 10 | |
| # ------------------------------------------------------------------ | |
| # Security | |
| # ------------------------------------------------------------------ | |
| ALLOWED_ROLES: List[str] = ["renter", "landlord", "admin"] | |
| # ------------------------------------------------------------------ | |
| # Cloudflare Images | |
| # ------------------------------------------------------------------ | |
| CF_ACCOUNT_ID: str = os.getenv("CF_ACCOUNT_ID", "") | |
| CF_API_TOKEN: str = os.getenv("CF_API_TOKEN", "") | |
| # ------------------------------------------------------------------ | |
| # LLM / Tooling keys | |
| # ------------------------------------------------------------------ | |
| OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "") | |
| HUGGINGFACE_API_KEY: str = os.getenv("HUGGINGFACE_API_KEY", "") | |
| HF_TOKEN: str = os.getenv("HF_TOKEN", "") | |
| MISTRAL_API_KEY: str = os.getenv("MISTRAL_API_KEY", "") | |
| ANTHROPIC_API_KEY: str = os.getenv("ANTHROPIC_API_KEY", "") | |
| GEMINI_API_KEY: str = os.getenv("GEMINI_API_KEY", "") | |
| OPENROUTER_API_KEY: str = os.getenv("OPENROUTER_API_KEY", "") | |
| # ============ DEEPSEEK (PRIMARY FOR AIDA) ============ | |
| DEEPSEEK_API_KEY: str = os.getenv("DEEPSEEK_API_KEY", "") | |
| DEEPSEEK_BASE_URL: str = os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com/v1") | |
| # ============ LANGGRAPH & TRACING ============ | |
| LANGCHAIN_TRACING_V2: bool = os.getenv("LANGCHAIN_TRACING_V2", "false").lower() == "true" | |
| LANGCHAIN_API_KEY: str = os.getenv("LANGCHAIN_API_KEY", "") | |
| LANGCHAIN_PROJECT: str = os.getenv("LANGCHAIN_PROJECT", "aida_agent") | |
| # ============ REDIS (SESSION & MEMORY) ============ | |
| REDIS_URL: str = os.getenv("REDIS_URL", "redis://localhost:6379") | |
| REDIS_PORT: int = int(os.getenv("REDIS_PORT", "6379")) | |
| REDIS_PASSWORD: str = os.getenv("REDIS_PASSWORD", "") | |
| REDIS_USERNAME: str = os.getenv("REDIS_USERNAME", "default") | |
| # ============ QDRANT (VECTOR DB) ============ | |
| QDRANT_URL: str = os.getenv("QDRANT_URL", "http://localhost:6333") | |
| QDRANT_API_KEY: str = os.getenv("QDRANT_API_KEY", "") | |
| # ============ OTHER ============ | |
| NODE_ENV: str = os.getenv("NODE_ENV", "development") | |
| TAVILY_API_KEY: str = os.getenv("TAVILY_API_KEY", "") | |
| SENTRY_DSN: str = os.getenv("SENTRY_DSN", "") | |
| class Config: | |
| env_file = ".env" | |
| case_sensitive = True | |
| extra = "ignore" | |
| settings = Settings() |