MicroFish/backend/app/config.py

97 lines
2.8 KiB
Python

"""
Configuration management
Loads settings from the .env file at the project root
"""
import os
from dotenv import load_dotenv
# Load the .env file from the project root
# Path: MiroFish/.env (relative to backend/app/config.py)
project_root_env = os.path.join(os.path.dirname(__file__), "../../.env")
if os.path.exists(project_root_env):
load_dotenv(project_root_env, override=True)
else:
# If no .env in root, try loading from environment variables (for production)
load_dotenv(override=True)
class Config:
"""Flask configuration class"""
# Flask config
SECRET_KEY = os.environ.get("SECRET_KEY", "mirofish-secret-key")
DEBUG = os.environ.get("FLASK_DEBUG", "False").lower() == "true"
# JSON config - disable ASCII escaping so non-ASCII characters display directly
JSON_AS_ASCII = False
# LLM config (unified OpenAI format)
LLM_API_KEY = os.environ.get("LLM_API_KEY")
LLM_BASE_URL = os.environ.get("LLM_BASE_URL", "https://api.openai.com/v1")
LLM_MODEL_NAME = os.environ.get("LLM_MODEL_NAME", "gpt-4o-mini")
# File upload config
MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB
UPLOAD_FOLDER = os.path.join(os.path.dirname(__file__), "../uploads")
ALLOWED_EXTENSIONS = {"pdf", "md", "txt", "markdown"}
# Text processing config
DEFAULT_CHUNK_SIZE = 500 # default chunk size
DEFAULT_CHUNK_OVERLAP = 50 # default overlap size
# OASIS simulation config
OASIS_DEFAULT_MAX_ROUNDS = int(os.environ.get("OASIS_DEFAULT_MAX_ROUNDS", "10"))
OASIS_SIMULATION_DATA_DIR = os.path.join(
os.path.dirname(__file__), "../uploads/simulations"
)
# OASIS platform available actions config
OASIS_TWITTER_ACTIONS = [
"CREATE_POST",
"LIKE_POST",
"REPOST",
"FOLLOW",
"DO_NOTHING",
"QUOTE_POST",
]
OASIS_REDDIT_ACTIONS = [
"LIKE_POST",
"DISLIKE_POST",
"CREATE_POST",
"CREATE_COMMENT",
"LIKE_COMMENT",
"DISLIKE_COMMENT",
"SEARCH_POSTS",
"SEARCH_USER",
"TREND",
"REFRESH",
"DO_NOTHING",
"FOLLOW",
"MUTE",
]
# Report Agent config
REPORT_AGENT_MAX_TOOL_CALLS = int(
os.environ.get("REPORT_AGENT_MAX_TOOL_CALLS", "5")
)
REPORT_AGENT_MAX_REFLECTION_ROUNDS = int(
os.environ.get("REPORT_AGENT_MAX_REFLECTION_ROUNDS", "2")
)
REPORT_AGENT_TEMPERATURE = float(os.environ.get("REPORT_AGENT_TEMPERATURE", "0.5"))
@classmethod
def validate(cls):
"""Validate required configuration"""
errors = []
if not cls.LLM_API_KEY:
errors.append("LLM_API_KEY not configured")
if cls.DEBUG:
import warnings
warnings.warn(
"Flask DEBUG mode is enabled. Do not use in production.",
RuntimeWarning,
)
return errors