97 lines
2.8 KiB
Python
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 |