82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
应用配置中心 - 集中管理所有配置项
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import os
|
|||
|
|
from dataclasses import dataclass, field
|
|||
|
|
from typing import List, Optional
|
|||
|
|
|
|||
|
|
|
|||
|
|
@dataclass
|
|||
|
|
class AppConfig:
|
|||
|
|
"""应用配置中心"""
|
|||
|
|
|
|||
|
|
# 分析配置
|
|||
|
|
max_rounds: int = field(default=20)
|
|||
|
|
force_max_rounds: bool = field(default=False)
|
|||
|
|
default_output_dir: str = field(default="outputs")
|
|||
|
|
|
|||
|
|
# 数据处理配置
|
|||
|
|
max_file_size_mb: int = field(default=500) # 最大文件大小(MB)
|
|||
|
|
chunk_size: int = field(default=100000) # 分块读取大小
|
|||
|
|
data_cache_enabled: bool = field(default=True)
|
|||
|
|
cache_dir: str = field(default=".cache/data")
|
|||
|
|
|
|||
|
|
# LLM配置
|
|||
|
|
llm_cache_enabled: bool = field(default=True)
|
|||
|
|
llm_cache_dir: str = field(default=".cache/llm")
|
|||
|
|
llm_stream_enabled: bool = field(default=False)
|
|||
|
|
|
|||
|
|
# 代码执行配置
|
|||
|
|
code_timeout: int = field(default=300) # 代码执行超时(秒)
|
|||
|
|
allowed_imports: List[str] = field(default_factory=lambda: [
|
|||
|
|
'pandas', 'numpy', 'matplotlib', 'seaborn', 'plotly',
|
|||
|
|
'scipy', 'sklearn', 'duckdb', 'datetime', 'json',
|
|||
|
|
'os', 're', 'pathlib', 'glob', 'typing', 'collections',
|
|||
|
|
'itertools', 'functools', 'warnings'
|
|||
|
|
])
|
|||
|
|
|
|||
|
|
# Web配置
|
|||
|
|
web_host: str = field(default="0.0.0.0")
|
|||
|
|
web_port: int = field(default=8000)
|
|||
|
|
upload_dir: str = field(default="uploads")
|
|||
|
|
|
|||
|
|
# 日志配置
|
|||
|
|
log_filename: str = field(default="log.txt")
|
|||
|
|
enable_code_logging: bool = field(default=False) # 是否记录生成的代码
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def from_env(cls) -> 'AppConfig':
|
|||
|
|
"""从环境变量创建配置"""
|
|||
|
|
config = cls()
|
|||
|
|
|
|||
|
|
# 从环境变量覆盖配置
|
|||
|
|
if max_rounds := os.getenv("APP_MAX_ROUNDS"):
|
|||
|
|
config.max_rounds = int(max_rounds)
|
|||
|
|
|
|||
|
|
if chunk_size := os.getenv("APP_CHUNK_SIZE"):
|
|||
|
|
config.chunk_size = int(chunk_size)
|
|||
|
|
|
|||
|
|
if cache_enabled := os.getenv("APP_CACHE_ENABLED"):
|
|||
|
|
config.data_cache_enabled = cache_enabled.lower() == "true"
|
|||
|
|
|
|||
|
|
return config
|
|||
|
|
|
|||
|
|
def validate(self) -> bool:
|
|||
|
|
"""验证配置"""
|
|||
|
|
if self.max_rounds <= 0:
|
|||
|
|
raise ValueError("max_rounds must be positive")
|
|||
|
|
|
|||
|
|
if self.chunk_size <= 0:
|
|||
|
|
raise ValueError("chunk_size must be positive")
|
|||
|
|
|
|||
|
|
if self.code_timeout <= 0:
|
|||
|
|
raise ValueError("code_timeout must be positive")
|
|||
|
|
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 全局配置实例
|
|||
|
|
app_config = AppConfig.from_env()
|