AIDA / app /config.py
destinyebuka's picture
proja
e2099f4
# ============================================================
# 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()