import os from dotenv import load_dotenv load_dotenv() BASE_DIR = os.path.abspath(os.path.dirname(__file__)) class Config: SECRET_KEY = os.environ.get("SECRET_KEY", "change-me-in-production") _db_uri = os.environ.get("DATABASE_URI", "") _default_uri = f"sqlite:///{os.path.join(BASE_DIR, 'data', 'app.db')}" # Fall back to SQLite if DATABASE_URI is empty or not a valid SQLAlchemy URL SQLALCHEMY_DATABASE_URI = ( _db_uri if _db_uri and "://" in _db_uri else _default_uri ) SQLALCHEMY_TRACK_MODIFICATIONS = False UPLOAD_FOLDER = os.environ.get("UPLOAD_FOLDER", os.path.join(BASE_DIR, "uploads")) VECTORDB_PATH = os.environ.get("VECTORDB_PATH", os.path.join(BASE_DIR, "vectordb")) ALLOWED_EXTENSIONS = {"pdf", "txt", "docx", "md"} MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50 MB # LLM Provider: "lmstudio" or "openai" AI_PROVIDER = os.environ.get("AI_PROVIDER", "lmstudio") LM_STUDIO_URL = os.environ.get("LM_STUDIO_URL", "http://localhost:1234") LM_STUDIO_MODEL = os.environ.get("LM_STUDIO_MODEL", "local-model") LM_STUDIO_EMBEDDING_MODEL = os.environ.get("LM_STUDIO_EMBEDDING_MODEL", "local-model") OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "") OPENAI_MODEL = os.environ.get("OPENAI_MODEL", "gpt-4o") RAG_TOP_K = int(os.environ.get("RAG_TOP_K", "6")) RAG_CHUNK_SIZE = int(os.environ.get("RAG_CHUNK_SIZE", "300")) RAG_CHUNK_OVERLAP = int(os.environ.get("RAG_CHUNK_OVERLAP", "75"))