"""演化候选领域纯逻辑(level 分类、自动应用策略、类型/作用域枚举)。 本模块是演化候选相关常量与纯谓词的单一源,禁止 IO。 枚举取值以 [契约字典](../../docs/contracts/contract-glossary.md) §12 为准。 """ from app.models.evolution import EvolutionCandidate # --------------------------------------------------------------------------- # Level 常量与自动应用策略 # --------------------------------------------------------------------------- # 半自动应用的 level 范围(L0-L3 写入程序记忆/人格权重等轻量参数,L4 核心变更需人工审核) AUTO_LEVELS: set[str] = {"L0", "L1", "L2", "L3"} # 所有可选 level,按风险升序排列 LEVELS: tuple[str, ...] = ("L0", "L1", "L2", "L3", "L4") # --------------------------------------------------------------------------- # Type / Scope 枚举 # --------------------------------------------------------------------------- # 演化候选类型 TYPES: tuple[str, ...] = ( "personality", "personality_weights", "retrieval_strategy", "tool_affinity", "memory", "tool_strategy", "safety_rule", "world_model", "procedural", "mood", ) # 演化候选作用域 SCOPES: tuple[str, ...] = ( "character_scope", "user_scope", "task_scope", "global_scope", ) # --------------------------------------------------------------------------- # 策略谓词 # --------------------------------------------------------------------------- def should_auto_apply(candidate: EvolutionCandidate) -> bool: """判断演化候选是否可半自动应用。 满足任一条件即可自动应用: 1. level 在 AUTO_LEVELS 范围内(L0-L3 低风险调整) 2. auto_apply_allowed 为 True(模型+系统共同判定允许自动应用) """ return candidate.level in AUTO_LEVELS or candidate.auto_apply_allowed