"""系统设置(大模型 + 学习方式)读写。""" from study_tool import database # ------------------------------------------------------------------ settings SETTINGS_NAME = "llm" DEFAULT_LLM = { "base_url": "https://api.openai.com/v1", "api_key": "", "model": "gpt-4o-mini", "temperature": 0.2, "timeout": 120, "prompt": "", } # 学习方式:fast = 只调 study/log 接口,不开浏览器;normal = 真播视频(可多路并发) DEFAULT_STUDY = { "mode": "fast", "parallel": 2, } # 故障推送:渠道插件(plugins/*/plugin.json 里 kind=notify)读这段配置 DEFAULT_NOTIFY = { "enabled": True, "base_url": "https://corn.hanhan.ltd", "app_key": "", "app_secret": "", "channel_name": "", "on_error": True, # 运行 / 课程异常 "on_login": True, # 登录失败 / 会话失效且无法续期 "on_progress": True, # 学习进度异常 "on_retry": True, # 同一原因反复重试 "retry_threshold": 3, # 重试几次算故障 "cooldown_min": 10, # 同一账号同一类型的推送冷却 } def load_settings(): data = database.get_setting(SETTINGS_NAME) or {} llm = dict(DEFAULT_LLM) study = dict(DEFAULT_STUDY) notify = dict(DEFAULT_NOTIFY) if isinstance(data, dict): raw = data.get("llm") if isinstance(raw, dict): llm.update({k: v for k, v in raw.items() if k in DEFAULT_LLM and v is not None}) st = data.get("study") if isinstance(st, dict): study.update({k: v for k, v in st.items() if v is not None}) nt = data.get("notify") if isinstance(nt, dict): notify.update({k: v for k, v in nt.items() if k in DEFAULT_NOTIFY and v is not None}) study["mode"] = study.get("mode") if study.get("mode") in ("fast", "normal") else "fast" try: study["parallel"] = max(1, min(int(study.get("parallel") or 2), 5)) except (TypeError, ValueError): study["parallel"] = 2 notify["enabled"] = bool(notify.get("enabled")) for flag in ("on_error", "on_login", "on_progress", "on_retry"): notify[flag] = bool(notify.get(flag)) try: notify["retry_threshold"] = max(2, min(int(notify.get("retry_threshold") or 3), 10)) except (TypeError, ValueError): notify["retry_threshold"] = 3 try: notify["cooldown_min"] = max(1, min(int(notify.get("cooldown_min") or 10), 1440)) except (TypeError, ValueError): notify["cooldown_min"] = 10 return {"llm": llm, "study": study, "notify": notify} def save_settings(data): database.set_setting(SETTINGS_NAME, {"llm": data.get("llm") or {}, "study": data.get("study") or {}, "notify": data.get("notify") or {}})