60 lines
3.2 KiB
Python
60 lines
3.2 KiB
Python
"""Read local configuration without changing the process environment or storage."""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT_DIR = Path(__file__).resolve().parents[1]
|
|
ALLOWED_EXT = {'.png', '.jpg', '.jpeg', '.gif', '.webp', '.pdf', '.txt', '.csv'}
|
|
MAX_UPLOAD_MB = 10
|
|
|
|
|
|
def default_config():
|
|
from dotenv import dotenv_values
|
|
|
|
local_config = dotenv_values(ROOT_DIR / '.env', encoding='utf-8-sig', interpolate=False)
|
|
api_key = os.environ.get('DEEPSEEK_API_KEY', local_config.get('DEEPSEEK_API_KEY'))
|
|
return {
|
|
'DATABASE': ROOT_DIR / 'history.db',
|
|
'UPLOAD_DIR': ROOT_DIR / 'uploads',
|
|
'BACKUP_DIR': ROOT_DIR / 'backups',
|
|
'LOG_DIR': ROOT_DIR / 'logs',
|
|
'DEEPSEEK_API_KEY': (api_key or '').strip(),
|
|
'ASR_API_KEY': str(os.environ.get('ASR_API_KEY', local_config.get('ASR_API_KEY')) or '').strip(),
|
|
'ASR_PROVIDER': str(os.environ.get('ASR_PROVIDER', local_config.get('ASR_PROVIDER')) or 'baidu').strip().lower(),
|
|
'BAIDU_ASR_API_KEY': str(os.environ.get('BAIDU_ASR_API_KEY', local_config.get('BAIDU_ASR_API_KEY')) or '').strip(),
|
|
'BAIDU_ASR_SECRET_KEY': str(os.environ.get('BAIDU_ASR_SECRET_KEY', local_config.get('BAIDU_ASR_SECRET_KEY')) or '').strip(),
|
|
'FFMPEG_BIN': str(os.environ.get('FFMPEG_BIN', local_config.get('FFMPEG_BIN')) or '').strip(),
|
|
'ASR_URL': str(os.environ.get('ASR_URL', local_config.get('ASR_URL')) or
|
|
'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions').strip(),
|
|
'ASR_MODEL': str(os.environ.get('ASR_MODEL', local_config.get('ASR_MODEL')) or 'qwen3-asr-flash').strip(),
|
|
'ORDER_DATA_TENANT_ID': str(os.environ.get('ORDER_DATA_TENANT_ID', local_config.get('ORDER_DATA_TENANT_ID')) or '').strip(),
|
|
'CUSTOMER_DEMO_ENABLED': str(os.environ.get('CUSTOMER_DEMO_ENABLED', local_config.get('CUSTOMER_DEMO_ENABLED', 'true'))).lower() in ('1','true','yes'),
|
|
'CUSTOMER_DEMO_USERNAME': str(os.environ.get('CUSTOMER_DEMO_USERNAME', local_config.get('CUSTOMER_DEMO_USERNAME', 'admin')) or '').strip(),
|
|
'CUSTOMER_DEMO_PASSWORD_HASH': str(os.environ.get('CUSTOMER_DEMO_PASSWORD_HASH', local_config.get('CUSTOMER_DEMO_PASSWORD_HASH',
|
|
'pbkdf2:sha256:600000$vY5fe7GwJQRQbhKV$a4c4eeb96e2bda18bfa6b82d263c0cd61dead2e3f224f694e01fc497152df72f')) or ''),
|
|
'CUSTOMER_DEMO_TENANT_ID': str(os.environ.get('CUSTOMER_DEMO_TENANT_ID', local_config.get('CUSTOMER_DEMO_TENANT_ID')) or '').strip(),
|
|
'CUSTOMER_DEMO_LOCAL_ORDERS': str(os.environ.get('CUSTOMER_DEMO_LOCAL_ORDERS', local_config.get('CUSTOMER_DEMO_LOCAL_ORDERS', 'true'))).lower() in ('1','true','yes'),
|
|
'MODEL_URL': 'https://api.deepseek.com/v1/chat/completions',
|
|
'MODEL_NAME': 'deepseek-chat',
|
|
'MAX_CONTEXT': 4,
|
|
'MAX_ANSWER_CHARS': 800,
|
|
'MAX_ANSWER_CHARS_EN': 1400,
|
|
'RATE_LIMIT_PER_MIN': 60,
|
|
'ALLOWED_EXT': set(ALLOWED_EXT),
|
|
'MAX_UPLOAD_MB': MAX_UPLOAD_MB,
|
|
'HOST': '0.0.0.0',
|
|
'PORT': 5000,
|
|
'INITIALIZE_RUNTIME': True,
|
|
}
|
|
|
|
|
|
def get_setting(name):
|
|
try:
|
|
from flask import current_app, has_app_context
|
|
except ImportError:
|
|
return default_config()[name]
|
|
if has_app_context():
|
|
return current_app.config[name]
|
|
return default_config()[name]
|