# ============================================================ # 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()