feat: Introduce LLM response caching and streaming, add application configuration, and enhance session data with progress and history tracking.
This commit is contained in:
81
config/app_config.py
Normal file
81
config/app_config.py
Normal file
@@ -0,0 +1,81 @@
|
||||
# -*- 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()
|
||||
Reference in New Issue
Block a user