[API + Memory] GET /api/v1/memories does not return full episode + episode.summary falls back to content[:200]
Issue Body(English Version - Recommended to post this)
Problem Description
While using EverMemOS for benchmarking and third-party integrations, I discovered two clear design/implementation inconsistencies in the /api/v1/memories interface. These issues prevent external users from seeing the true episodic content:
-
GET /api/v1/memories does not return the complete episode field
The interface only returns a lightweight version containing title and summary, while the core episode (the full content actually used by internal retrieval, BM25, rerank, and LLM) is not exposed at all.
-
episode.summary is low quality and actually degenerates into content[:200]
The system does not instruct the LLM to generate a real summary, nor does it reuse the upstream MemCell.summary. Instead, it directly falls back to truncating the first 200 characters of the content.
Reproduction Steps
- Call
GET /api/v1/memories
- Check any returned memory entry
- Compare the internally stored
episodic_memory.episode with the returned summary
Evidence Chain (verified on latest main branch)
Issue 1: episode not exported
src/agentic_layer/fetch_mem_service.py: The conversion function only uses EpisodicMemoryModel and maps only title and summary — no episode or full content is included.
src/api_specs/memory_models.py: The EpisodicMemoryModel definition does not even contain an episode field.
- Internal retrieval heavily relies on the full episode (
src/agentic_layer/agentic_utils.py:146, src/agentic_layer/retrieval_utils.py:88).
- The storage layer clearly holds the complete content (
src/infra_layer/adapters/out/persistence/document/memory/episodic_memory.py:29).
Issue 2: summary fallback
src/memory_layer/prompts/en/episode_mem_prompts.py: The episode extraction prompt only asks for title + content — no summary field is mentioned.
src/memory_layer/memory_extractor/episode_memory_extractor.py (in the _extract_episode function):
if "summary" not in data or not data["summary"]:
data["summary"] = data["content"][:200] # ← This is the source of the pseudo-summary
- The upstream boundary detection already generates a high-quality
MemCell.summary (src/memory_layer/memcell_extractor/conv_memcell_extractor.py:641), but the episode pipeline never reuses it.
Impact
- External benchmarks, audits, and third-party systems cannot see the real memory content
- Users mistakenly treat
summary as the complete memory, severely degrading integration quality
- Strong internal capabilities (full episode) vs. weak external contract → inconsistent experience
Suggested Fix (for reference)
- Short-term: Add a query parameter
?full=true to GET /api/v1/memories to optionally return the full episode field (backward compatible).
- Medium/long-term:
- Update the episode prompt to explicitly request a high-quality
summary
- In the extractor, prioritize reusing
MemCell.summary (with fallback as last resort)
- Extend
EpisodicMemoryModel to include an optional episode field
This improvement would be extremely valuable for all external users (especially those doing benchmarks). Looking forward to the team's thoughts and feedback!
Additional Information
- Environment: Latest main branch (March 2026)
[API + Memory] GET /api/v1/memories does not return full episode + episode.summary falls back to content[:200]Issue Body(English Version - Recommended to post this)
Problem Description
While using EverMemOS for benchmarking and third-party integrations, I discovered two clear design/implementation inconsistencies in the
/api/v1/memoriesinterface. These issues prevent external users from seeing the true episodic content:GET /api/v1/memories does not return the complete
episodefieldThe interface only returns a lightweight version containing
titleandsummary, while the coreepisode(the full content actually used by internal retrieval, BM25, rerank, and LLM) is not exposed at all.episode.summary is low quality and actually degenerates into
content[:200]The system does not instruct the LLM to generate a real summary, nor does it reuse the upstream
MemCell.summary. Instead, it directly falls back to truncating the first 200 characters of the content.Reproduction Steps
GET /api/v1/memoriesepisodic_memory.episodewith the returnedsummaryEvidence Chain (verified on latest main branch)
Issue 1: episode not exported
src/agentic_layer/fetch_mem_service.py: The conversion function only usesEpisodicMemoryModeland maps onlytitleandsummary— noepisodeor full content is included.src/api_specs/memory_models.py: TheEpisodicMemoryModeldefinition does not even contain anepisodefield.src/agentic_layer/agentic_utils.py:146,src/agentic_layer/retrieval_utils.py:88).src/infra_layer/adapters/out/persistence/document/memory/episodic_memory.py:29).Issue 2: summary fallback
src/memory_layer/prompts/en/episode_mem_prompts.py: The episode extraction prompt only asks fortitle+content— nosummaryfield is mentioned.src/memory_layer/memory_extractor/episode_memory_extractor.py(in the_extract_episodefunction):MemCell.summary(src/memory_layer/memcell_extractor/conv_memcell_extractor.py:641), but the episode pipeline never reuses it.Impact
summaryas the complete memory, severely degrading integration qualitySuggested Fix (for reference)
?full=truetoGET /api/v1/memoriesto optionally return the fullepisodefield (backward compatible).summaryMemCell.summary(with fallback as last resort)EpisodicMemoryModelto include an optionalepisodefieldThis improvement would be extremely valuable for all external users (especially those doing benchmarks). Looking forward to the team's thoughts and feedback!
Additional Information