Tencent released Hy-Memory-30B-A3B, a 3B-active memory writer that leads Mem0, MemOS, and Hy-Memory scores.
Tencent Hunyuan released Hy-Memory-30B-A3B, a compact long-term-memory writer with about 3B active parameters, now trending on Hugging Face. It is meant to replace a general LLM on the write path in Mem0, MemOS, and Hy-Memory, choosing what to store and how to update a persistent memory bank. Training has two stages: Memory On-Policy Distillation, then Attributed Memory Reinforcement Learning. On a fixed 20% subsample, it scored 55.49 overall versus 54.62 for Claude Opus 5 and 53.64 for DeepSeek V4.1 Flash, including 56.89 on held-out EverMemOS. A tech report is listed as arXiv:2610.22196.
Hy-Memory-30B-A3B is a memory writer with about 3B active parameters.
Training uses on-policy distillation, then attributed memory reinforcement learning.
It posts a 55.49 cross-harness average, ahead of Claude Opus 5 at 54.62.
EverMemOS was held out and still scored 56.89.
Evaluation changes only the writer; harness, retrieval, and answer model stay fixed.
**Hy-Memory-30B-A3B** is a compact long-term-memory writer model (~3B active parameters) developed by Tencent Hunyuan to execute the write path inside external memory frameworks. It directly replaces the general-purpose LLM inside **Mem0**, **MemOS**, and **Hy-Memory** (covering Chat, Working, and Coding scenarios), deciding what information to retain, how precisely to represent it, and how new evidence should update the persistent memory bank. The model is trained in two stages—Memory On-Policy Distillation (OPD) followed by Attributed Memory Reinforcement Learning—and transfers directly to unseen memory frameworks such as **EverMemOS**.
<p><em>Cross-harness macro-average scores on the fixed 20% benchmark matrix. Each harness score averages six metrics equally; Overall averages the four harnesses equally. EverMemOS is held out from training.</em></p>
</div>
---
## Two-Stage Training
<div align="center">
<img src="./figures/fig1_training_process.png" alt="Two-stage training process" width="96%"/>
<p><em>Figure 1: Hy-Memory-30B-A3B is trained inside the same deployed harness configurations in both stages. OPD supplies dense teacher supervision on student-written state chains; RL examines the resulting banks, assigns chunk-level credit, and carries the selected bank across windows. In the rollout grid, each cell is the bank after chunk t of rollout i, shaded by its chunk score s_i[t]. Advantages are normalized within each column (dashed: one chunk-level group), so the best rollout can differ from chunk to chunk. The outlined cell is the final bank with the highest sum_t s_i[t], which becomes the parent of the next window.</em></p>
</div>
---
## Experiments
### Evaluation Principles
The evaluation changes only the memory writer. For each comparison, the harness version and prompts are fixed, retrieval configuration is fixed, and the answer model, judge, and other framework-side components are held fixed. Throughout this report, every reference to a DeepSeek Flash endpoint denotes **DeepSeek V4.1 Flash**. Decoding settings are matched where APIs permit, each writer builds its own bank from an empty state, and test examples and scoring rules are identical.
For computational efficiency, every benchmark in the main four-harness matrix is evaluated on a fixed 20% subsample. Each harness score is the equal-weight average of six metrics: **LoCoMo Judge**, **LongMemEval (LME)**, **PersonaMem-v2 (PM-v2)**, **Travel SPS**, **Shopping PS**, and **Code Memory Bench (CMB)**. CMB is itself the equal-weight average of two repository QA evaluations. The overall score is the equal-weight average of the four harness scores.
Deploy the model with vLLM (tested with v0.31.0) using `--served-model-name hy-memory`, then call the OpenAI-compatible API. The example below extracts user facts and preferences with no-think mode enabled.
```python
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8000/v1",
api_key="EMPTY",
)
response = client.chat.completions.create(
model="hy-memory",
messages=[
{
"role": "system",
"content": (
"Extract explicit user facts and preferences from the conversation. "
"Write each memory as a concise, self-contained statement. "
"Do not infer or invent information. "
'Return only a JSON object with a "memories" list of strings.'
),
},
{
"role": "user",
"content": (
"My name is Alex. I live in Seattle and work as a software engineer. "
"I mainly use Python and prefer concise answers with code examples. "
"I'm vegetarian, so please keep that in mind when suggesting meals."