Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
390 changes: 195 additions & 195 deletions backend/app/api/graph.py

Large diffs are not rendered by default.

544 changes: 272 additions & 272 deletions backend/app/api/report.py

Large diffs are not rendered by default.

63 changes: 31 additions & 32 deletions backend/app/config.py
Original file line number Diff line number Diff line change
@@ -1,54 +1,54 @@
"""
配置管理
统一从项目根目录的 .env 文件加载配置
Configuration Management
Loads configuration from .env file in project root
"""

import os
from dotenv import load_dotenv

# 加载项目根目录的 .env 文件
# 路径: MiroFish/.env (相对于 backend/app/config.py)
# Load .env file from 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:
# 如果根目录没有 .env,尝试加载环境变量(用于生产环境)
# If no .env in root, load environment variables (for production)
load_dotenv(override=True)


class Config:
"""Flask配置类"""
# Flask配置
"""Flask configuration class"""

# Flask configuration
SECRET_KEY = os.environ.get('SECRET_KEY', 'mirofish-secret-key')
DEBUG = os.environ.get('FLASK_DEBUG', 'True').lower() == 'true'
# JSON配置 - 禁用ASCII转义,让中文直接显示(而不是 \uXXXX 格式)

# JSON configuration - disable ASCII escape to display Chinese directly (instead of \uXXXX format)
JSON_AS_ASCII = False
# LLM配置(统一使用OpenAI格式)

# LLM configuration (unified OpenAI SDK 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')
# Zep配置

# Zep configuration
ZEP_API_KEY = os.environ.get('ZEP_API_KEY')
# 文件上传配置

# File upload configuration
MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB
UPLOAD_FOLDER = os.path.join(os.path.dirname(__file__), '../uploads')
ALLOWED_EXTENSIONS = {'pdf', 'md', 'txt', 'markdown'}
# 文本处理配置
DEFAULT_CHUNK_SIZE = 500 # 默认切块大小
DEFAULT_CHUNK_OVERLAP = 50 # 默认重叠大小
# OASIS模拟配置

# Text processing configuration
DEFAULT_CHUNK_SIZE = 500 # Default chunk size
DEFAULT_CHUNK_OVERLAP = 50 # Default overlap size

# OASIS simulation configuration
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平台可用动作配置

# OASIS platform available actions configuration
OASIS_TWITTER_ACTIONS = [
'CREATE_POST', 'LIKE_POST', 'REPOST', 'FOLLOW', 'DO_NOTHING', 'QUOTE_POST'
]
Expand All @@ -57,19 +57,18 @@ class Config:
'LIKE_COMMENT', 'DISLIKE_COMMENT', 'SEARCH_POSTS', 'SEARCH_USER',
'TREND', 'REFRESH', 'DO_NOTHING', 'FOLLOW', 'MUTE'
]
# Report Agent配置

# Report Agent configuration
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 未配置")
errors.append("LLM_API_KEY not configured")
if not cls.ZEP_API_KEY:
errors.append("ZEP_API_KEY 未配置")
return errors

errors.append("ZEP_API_KEY not configured")
return errors
Loading