fix(cli): clarify memory status label to avoid built-in store confusion - #18491
fix(cli): clarify memory status label to avoid built-in store confusion#18491liuhao1024 wants to merge 1 commit into
Conversation
|
Hi @liuhao1024 — small thing on the new test in Suggest tightening to something like: assert "Memory subsystem: active" in out
assert "Built-in" not in outThat way the test actually guards the new label rather than just checking for any substring containing "active". |
Add the two commit emails used by liuhao1024: - liuhao1024@users.noreply.github.com (GitHub noreply) - sunsky.lau@gmail.com (personal) These were flagged by the Contributor Attribution Check CI on PRs NousResearch#18734, NousResearch#18491, NousResearch#18009, and NousResearch#17761.
|
@Tranquil-Flow Good catch — the old Fixed: replaced with Pushed: |
teknium1
left a comment
There was a problem hiding this comment.
Thanks for addressing a real source of confusion. The current status line is indeed unconditional, but the proposed replacement does not report the state that matters to the issue.
Problems
- The changed
Memory subsystem: activeline remains unconditional (hermes_cli/memory_setup.py:396in this PR). Current runtime loads MEMORY.md/USER.md only whenmemory.memory_enabledormemory.user_profile_enabledis true (agent/agent_init.py:1333-1345), including the disabled-built-in setup described by issue #18404. - The new tests require that
Built-innever appear, although the documented enabled configuration keeps built-in MEMORY.md/USER.md active alongside an external provider (website/docs/user-guide/features/memory-providers.md:9).
Suggested changes
- Derive the displayed built-in-store state from the two memory configuration flags, and test both enabled and disabled states with an external provider.
- Preserve a built-in-store label when it is enabled; avoid an unconditional replacement label.
Automated hermes-sweeper review.
| @@ -393,7 +393,7 @@ def cmd_status(args) -> None: | |||
| provider_name = mem_config.get("provider", "") | |||
|
|
|||
| print(f"\nMemory status\n" + "─" * 40) | |||
| print(f" Built-in: always active") | |||
| print(f" Memory subsystem: active") | |||
There was a problem hiding this comment.
agent/agent_init.py:1333-1345 only loads the built-in MEMORY.md/USER.md store when memory_enabled or user_profile_enabled is true. This unconditional active label remains wrong for the disabled-built-in configuration in #18404; please derive and report the built-in state from those flags instead.
Addresses teknium1's review on PR NousResearch#18491: - The status message should reflect actual built-in store state, not be unconditional. - When memory.memory_enabled or memory.user_profile_enabled is true, show 'Built-in store: active'. Otherwise show 'Built-in store: disabled'. - This correctly reflects the runtime behavior: MEMORY.md/USER.md are loaded only when those flags are true (agent/agent_init.py:1350-1360). Tests added: - test_builtin_store_disabled_by_default - test_builtin_store_active_when_memory_enabled - test_builtin_store_active_when_profile_enabled - test_provider_with_builtin_store_active - test_provider_with_builtin_store_disabled Fixes NousResearch#18404 (original issue) and addresses review feedback.
6327687 to
959c57f
Compare
|
Merged via #70065 which uses a more thorough approach from #23630 by @thirstycrow. Your PR was submitted first and your test approach was adapted. Both contributors credited. Thanks! |
What does this PR do?
Change the misleading
hermes memory statuslabel from "Built-in: always active" to "Memory subsystem: active" to distinguish the memory framework/injection pipeline from the built-in storage backend.Root Cause
hermes_cli/memory_setup.py:cmd_status()unconditionally printedBuilt-in: always active, which users interpreted as the built-in storage backend still running alongside their configured external provider (e.g. mnemosyne, honcho). This caused confusion when troubleshooting memory duplication — users thoughthermes tools disable memorydidn't take effect.The "built-in" label actually refers to the memory subsystem framework (the pipeline that loads providers and injects context into prompts), not the storage backend. When a non-built-in provider is configured, memories go to that provider, not the built-in store.
Related Issue
N/A
Type of Change
Changes Made
How to Test
pytest tests/ -q— all tests should passChecklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation & Housekeeping
docs/, docstrings) — or N/Acli-config.yaml.exampleif I added/changed config keys — or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture and workflows — or N/A