| 83 | |
| 84 | @classmethod |
| 85 | def from_config(cls, cfg: MetaClawConfig) -> "MemoryManager": |
| 86 | policy_store = MemoryPolicyStore(cfg.memory_policy_path) |
| 87 | policy_exists = policy_store.path.exists() |
| 88 | policy_state = policy_store.load() |
| 89 | telemetry_store = MemoryTelemetryStore(cfg.memory_telemetry_path) |
| 90 | if not policy_exists: |
| 91 | policy_state.max_injected_units = cfg.memory_max_injected_units |
| 92 | policy_state.max_injected_tokens = cfg.memory_max_injected_tokens |
| 93 | policy_state.retrieval_mode = cfg.memory_retrieval_mode |
| 94 | policy_store.save(policy_state, reason="bootstrap") |
| 95 | policy = MemoryPolicy.from_state(policy_state) |
| 96 | store = MemoryStore(cfg.memory_store_path) |
| 97 | return cls( |
| 98 | store=store, |
| 99 | policy=policy, |
| 100 | scope_id=cfg.memory_scope, |
| 101 | auto_consolidate=cfg.memory_auto_consolidate, |
| 102 | retrieval_mode=policy_state.retrieval_mode or cfg.memory_retrieval_mode, |
| 103 | use_embeddings=cfg.memory_use_embeddings, |
| 104 | policy_store=policy_store, |
| 105 | telemetry_store=telemetry_store, |
| 106 | embedding_mode=getattr(cfg, "memory_embedding_mode", "hashing"), |
| 107 | embedding_model=getattr(cfg, "memory_embedding_model", "all-MiniLM-L6-v2"), |
| 108 | flush_every=getattr(cfg, "memory_flush_every", 5), |
| 109 | ) |
| 110 | |
| 111 | @classmethod |
| 112 | def from_config_with_policy_state( |