Coverage for config.py: 100%

1 import os

2 from qrclaw.config_manager import init_config, load_config

3

4# 初始化并加载配置

5 init_config()

6 load_config()

7

8# Agent 配置

9 AGENT_NAME = os.getenv("AGENT_NAME", "QRClaw")

10 OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "")

11 OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o")

12 OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "")

13

14# LLM 渠道：openai（默认）| vertex

15 LLM_PROVIDER = os.getenv("LLM_PROVIDER", "openai")

16

17# Vertex AI 配置（Express API Key 方式）

18 VERTEX_API_KEY = os.getenv("VERTEX_API_KEY", "")

19

20 MAX_ITERATIONS = int(os.getenv("MAX_ITERATIONS", "50"))

21

22# 模型最大上下文窗口（token数）

23 _MODEL_MAX_TOKENS = int(os.getenv("MODEL_MAX_TOKENS", "128000"))

24

25# 压缩配置

26# 超过 60% 触发压缩

27 COMPRESS_THRESHOLD = int(_MODEL_MAX_TOKENS * 0.6)

28

29# 压缩后目标范围：摘要 + 短期记忆 = 20%~25% 上下文窗口

30 COMPRESS_TARGET_MIN_RATIO = 0.20 # 最小 20%，避免压缩太短

31 COMPRESS_TARGET_MAX_RATIO = 0.25 # 最大 25%，避免压缩效果差

32

33# 摘要目标占 10% 上下文窗口

34 COMPRESS_SUMMARY_TARGET_TOKENS = int(_MODEL_MAX_TOKENS * 0.10)

35# 摘要最大输出 token 数（LLM 的 max_tokens 参数上限）

36 COMPRESS_SUMMARY_MAX_TOKENS = int(os.getenv("COMPRESS_SUMMARY_MAX_TOKENS", str(COMPRESS_SUMMARY_TARGET_TOKENS * 2)))

37

38# 短期记忆占 12% 上下文窗口

39 COMPRESS_RECENT_TARGET_TOKENS = int(_MODEL_MAX_TOKENS * 0.12)

40 COMPRESS_RECENT_MAX_TOKENS = int(os.getenv("COMPRESS_RECENT_MAX_TOKENS", str(COMPRESS_RECENT_TARGET_TOKENS)))

41

42# Tavily API（网页搜索）

43 TAVILY_API_KEY = os.getenv("TAVILY_API_KEY", "")

44

45# 心跳配置

46 HEARTBEAT_ENABLED = os.getenv("HEARTBEAT_ENABLED", "true").lower() == "true"

47 HEARTBEAT_INTERVAL = int(os.getenv("HEARTBEAT_INTERVAL", "3600")) # 默认 1 小时

48

49# 日志配置

50 LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")

51 LOG_MAX_DAYS = int(os.getenv("LOG_MAX_DAYS", "30"))

52 LOG_TO_FILE = os.getenv("LOG_TO_FILE", "true").lower() == "true"

53 LOG_TO_CONSOLE = os.getenv("LOG_TO_CONSOLE", "true").lower() == "true"

54# 控制台默认只显示 WARNING 及以上级别的日志，避免输出太多

55 LOG_CONSOLE_LEVEL = os.getenv("LOG_CONSOLE_LEVEL", "WARNING")