{ "model": "CludeMem-E4B", "about": "One entry per memory operation. Send the task's system_prompt as the system message and the input, formatted as user_format describes, as the user message; the reply is one JSON object with output_keys. output_values lists the values those fields take in the training targets. The examples are test items whose inputs do not occur in the training data; example.output is the reference reply.", "chat_template": { "apply_chat_template_kwargs": { "add_generation_prompt": true, "enable_thinking": true }, "rendered_form": "<|turn>system\n<|think|>\n{system}\n<|turn>user\n{user}\n<|turn>model\n", "note": "enable_thinking=True reproduces the training prompt: a '<|think|>' line opens the system turn. The model does not emit a thinking block; it replies with one JSON object. transformers' apply_chat_template omits the line unless enable_thinking=True is passed.", "tokenizers_checked": [ "google/gemma-4-e4b-it", "unsloth/gemma-4-E4B-it" ] }, "decoding": "greedy (temperature 0)", "tasks": { "CLASSIFY": { "system_prompt": "Classify the memory. Output JSON: {type, importance (0-1), tags[], concepts[], emotional_valence (-1..1)}.", "user_format": { "template": "{memory text}", "description": "One memory statement as free text on a single line." }, "output_keys": [ "type", "importance", "tags", "concepts", "emotional_valence" ], "output_values": { "type": [ "episodic", "semantic" ], "importance": [ 0.3, 0.4, 0.8, 0.6, 0.5, 0.85, 0.9 ], "emotional_valence": [ 0.2, 0, -0.3, 0.3, 0.5, -0.4 ] }, "example": { "system": "Classify the memory. Output JSON: {type, importance (0-1), tags[], concepts[], emotional_valence (-1..1)}.", "user": "By the way, around then on 2026-02-16, Priya spent the afternoon reviewing the Polaris roadmap, triaged the mobile backlog, and noted follow-ups for the data sync. It came up while we were chatting.", "output": { "type": "episodic", "importance": 0.3, "tags": [ "event", "task", "priya" ], "concepts": [ "event", "task" ], "emotional_valence": 0.2 } } }, "EXTRACT": { "system_prompt": "Extract atomic memories from the text. Output JSON: {memories:[{content, summary, type}]}.", "user_format": { "template": "{Speaker}: {utterance}\\n{Speaker}: {utterance}\\n...", "description": "A dialogue block, one 'Name: utterance' line per turn. Some rows mix in non-dialogue lines (log lines, markdown tables, tool-call JSON, code fences) that carry no memory." }, "output_keys": [ "memories" ], "output_values": { "memories[].type": [ "episodic", "semantic" ] }, "example": { "system": "Extract atomic memories from the text. Output JSON: {memories:[{content, summary, type}]}.", "user": "Tomas: Actually, scratch what I said before — tomas now prefers matcha, having switched from cola.\nTomas: By the way, around then tomas started a new job at Brightwell on 2026-07-18. It came up while we were chatting.\n{\"tool\":\"search\",\"status\":\"ok\",\"hits\":1}", "output": { "memories": [ { "content": "Tomas now prefers matcha, having switched from cola.", "summary": "Tomas now prefers matcha, having switched from cola.", "type": "semantic" }, { "content": "Tomas started a new job at Brightwell on 2026-07-18.", "summary": "Tomas started a new job at Brightwell on 2026-07-18.", "type": "episodic" } ] } } }, "ENTITIES": { "system_prompt": "Extract entities and relations. Output JSON: {entities:[{name,type,aliases}], relations:[{head,type,tail}]}.", "user_format": { "template": "{memory text}", "description": "One memory statement as free text on a single line." }, "output_keys": [ "entities", "relations" ], "output_values": { "entities[].type": [ "person", "location", "organization", "project" ], "relations[].type": [ "lives_in", "works_at", "leads" ] }, "example": { "system": "Extract entities and relations. Output JSON: {entities:[{name,type,aliases}], relations:[{head,type,tail}]}.", "user": "Actually, scratch what I said before — on 2026-05-02, Theo spent the afternoon reviewing the Beacon roadmap, triaged the mobile backlog, and noted follow-ups for the product sync.", "output": { "entities": [ { "name": "Theo", "type": "person", "aliases": [] } ], "relations": [] } } }, "TEMPORAL": { "system_prompt": "Extract the event date and its temporal links to the known events. Output JSON: {event_date, precision, links:[{type,target}]}.", "user_format": { "template": "Today is {YYYY-MM-DD}.\\nNew event [fN]: {text}\\nKnown events:\\n[fN] {text} ({YYYY-MM-DD})\\n...", "description": "Reference date, the new event with its id, then the known events, each followed by its date in parentheses. A few rows have no known events (the 'Known events:' block is absent)." }, "output_keys": [ "event_date", "precision", "links" ], "output_values": { "precision": [ "day" ], "links[].type": [ "happens_before", "happens_after" ] }, "example": { "system": "Extract the event date and its temporal links to the known events. Output JSON: {event_date, precision, links:[{type,target}]}.", "user": "Today is 2026-06-01.\nNew event [f57]: I think on 2026-03-19, Nina spent the afternoon reviewing the Quartz roadmap, triaged the mobile backlog, and noted follow-ups for the data sync. At least that's my sense of it.\nKnown events:\n[f25] On 2026-03-01, Nina spent the afternoon reviewing the Beacon roadmap, triaged the infra backlog, and noted follow-ups for the data sync. (2026-03-01)\n[f41] On 2026-03-01, Nina spent the afternoon reviewing the Quartz roadmap, triaged the growth backlog, and noted follow-ups for the data sync. (2026-03-01)\n[f23] On 2026-03-10, Nina spent the afternoon reviewing the Sable roadmap, triaged the growth backlog, and noted follow-ups for the design sync. (2026-03-10)\n[f22] On 2026-03-24, Nina spent the afternoon reviewing the Quartz roadmap, triaged the mobile backlog, and noted follow-ups for the platform sync. (2026-03-24)\n[f14] On 2026-04-04, Nina spent the afternoon reviewing the Beacon roadmap, triaged the mobile backlog, and noted follow-ups for the ops sync. (2026-04-04)\n[f34] On 2026-04-06, Nina spent the afternoon reviewing the Echo roadmap, triaged the infra backlog, and noted follow-ups for the design sync. (2026-04-06)", "output": { "event_date": "2026-03-19", "precision": "day", "links": [ { "type": "happens_after", "target": "f25" }, { "type": "happens_after", "target": "f41" }, { "type": "happens_after", "target": "f23" }, { "type": "happens_before", "target": "f22" }, { "type": "happens_before", "target": "f14" }, { "type": "happens_before", "target": "f34" } ] } } }, "CONSOLIDATE": { "system_prompt": "Consolidate the memories into evidence-linked insights. Output JSON: {insights:[{content, evidence[]}]}.", "user_format": { "template": "[fN] {memory}\\n[fN] {memory}\\n...", "description": "One memory per line, each prefixed with its id." }, "output_keys": [ "insights" ], "output_values": {}, "example": { "system": "Consolidate the memories into evidence-linked insights. Output JSON: {insights:[{content, evidence[]}]}.", "user": "[f1] Kai lives in Austin.\n[f2] Kai moved to Seoul on 2026-10-21.\n[f3] Kai currently resides in Seoul.\n[f4] Kai enjoys living in Seoul.\n[f5] Kai prefers cola over matcha.\n[f6] Kai now prefers matcha, having switched from cola.\n[f7] Kai started a new job at Aperture on 2026-08-16.\n[f8] Kai is allergic to gluten.", "output": { "insights": [ { "content": "Kai lives in Austin.", "evidence": [ "f1" ] }, { "content": "Kai currently resides in Seoul.", "evidence": [ "f3" ] }, { "content": "Kai enjoys living in Seoul.", "evidence": [ "f4" ] }, { "content": "Kai prefers cola over matcha.", "evidence": [ "f5" ] }, { "content": "Kai now prefers matcha, having switched from cola.", "evidence": [ "f6" ] }, { "content": "Kai is allergic to gluten.", "evidence": [ "f8" ] } ] } } }, "COMPACT": { "system_prompt": "Compact the old memories into one summary, preserving entities and the date range. Output JSON: {summary, preserved_entities[], date_range:{start,end}}.", "user_format": { "template": "[fN] {memory}\\n[fN] {memory}\\n...", "description": "One old memory per line, each prefixed with its id." }, "output_keys": [ "summary", "preserved_entities", "date_range" ], "output_values": {}, "example": { "system": "Compact the old memories into one summary, preserving entities and the date range. Output JSON: {summary, preserved_entities[], date_range:{start,end}}.", "user": "[f2] Aisha moved to Lisbon on 2026-03-18.\n[f7] Aisha started a new job at Northstar on 2026-10-22.\n[f9] The Beacon project shipped on 2026-04-13.", "output": { "summary": "Aisha: 3 events covering Aisha, Lisbon, Northstar, Beacon.", "preserved_entities": [ "Aisha", "Lisbon", "Northstar", "Beacon" ], "date_range": { "start": "2026-03-18", "end": "2026-10-22" } } } }, "RECONCILE": { "system_prompt": "Decide how the two memories relate. Output JSON: {verdict, resolution, weaker_id, confidence}.", "user_format": { "template": "Memory A [fN]: {text}\\nMemory B [fN]: {text}", "description": "Exactly two lines, the two memories to compare with their ids. weaker_id in the output names one of these ids, or is null." }, "output_keys": [ "verdict", "resolution", "weaker_id", "confidence" ], "output_values": { "verdict": [ "contradicts", "supersedes", "duplicate", "consistent" ], "confidence": [ 0.9, 0.8, 0.75, 0.95, 0.85 ], "resolution": [ "Memory A and Memory B cannot be ordered; the conflict is unresolved.", "Memory B conflicts with Memory A; treat B as current.", "Memory B is the current truth; Memory A is outdated.", "Memory B restates Memory A; keep one.", "Memory A and Memory B agree; both are kept.", "Separate periods; both memories are kept.", "Different attributes; both memories are kept.", "Memory A is dated later than Memory B; treat Memory A as current.", "Memory B is dated later than Memory A; treat Memory B as current.", "Different people; both memories are kept.", "The memories overlap in time and cannot be ordered; the conflict is unresolved.", "Memory B restates Memory A with a coarser date; keep Memory A.", "Memory A is outdated; Memory B is the current truth.", "Memory A restates Memory B with a coarser date; keep Memory B.", "Memory B restates Memory A using another form of the same value; keep Memory A.", "Memory B is outdated; Memory A is the current truth.", "Memory A restates Memory B using another form of the same value; keep Memory B.", "Memory B names the same person as Memory A by a short form; keep Memory A.", "Memory A names the same person as Memory B by a short form; keep Memory B." ], "weaker_id": [ "one of the two input ids", "null" ] }, "example": { "system": "Decide how the two memories relate. Output JSON: {verdict, resolution, weaker_id, confidence}.", "user": "Memory A [f2]: Caleb moved to Toronto on 2026-03-06.\nMemory B [f4]: Caleb enjoys living in Toronto.", "output": { "verdict": "consistent", "resolution": "Memory A and Memory B agree; both are kept.", "weaker_id": null, "confidence": 0.9 } } }, "QUERY": { "system_prompt": "Understand the query. Output JSON: {expanded_queries[], temporal_constraints, type_filters[], entities[], intent}.", "user_format": { "template": "Today is {YYYY-MM-DD}.\\n{question}", "description": "Reference date on the first line, the user's question on the second." }, "output_keys": [ "expanded_queries", "temporal_constraints", "type_filters", "entities", "intent" ], "output_values": { "intent": [ "lookup", "temporal_lookup" ], "type_filters": [ [] ] }, "example": { "system": "Understand the query. Output JSON: {expanded_queries[], temporal_constraints, type_filters[], entities[], intent}.", "user": "Today is 2026-06-01.\nDid Zara move to Lyon on 2026-04-19?", "output": { "expanded_queries": [ "Did Zara move to Lyon on 2026-04-19?", "Did Zara move to Lyon on 2026-04-19" ], "temporal_constraints": { "after": null, "before": null }, "type_filters": [], "entities": [ "Zara", "Lyon" ], "intent": "temporal_lookup" } } }, "ANSWER": { "system_prompt": "Answer ONLY from the provided memories; abstain if unsupported. Output JSON: {rationale, answer, citations[], confidence, abstain}.", "user_format": { "template": "Question: {question}\\n\\nMemories:\\n[fN] {memory}\\n[fN] {memory}\\n...", "description": "The question, a blank line, 'Memories:', then one retrieved memory per line with its id. citations in the output are ids from this list." }, "output_keys": [ "rationale", "answer", "citations", "confidence", "abstain" ], "output_values": { "abstain": [ false, true ], "confidence": [ 0.9, 0.8 ], "answer (when abstain is true)": [ "I do not have enough information to answer that." ] }, "example": { "system": "Answer ONLY from the provided memories; abstain if unsupported. Output JSON: {rationale, answer, citations[], confidence, abstain}.", "user": "Question: Did Tomas move to Lisbon on 2026-03-14?\n\nMemories:\n[f1] Tomas lives in Toronto.\n[f2] Tomas moved to Lisbon on 2026-03-12.", "output": { "rationale": "No provided memory answers this.", "answer": "I do not have enough information to answer that.", "citations": [], "confidence": 0.8, "abstain": true } }, "example_answerable": { "system": "Answer ONLY from the provided memories; abstain if unsupported. Output JSON: {rationale, answer, citations[], confidence, abstain}.", "user": "Question: Where does Maya live now?\n\nMemories:\n[f2] Maya moved to Austin on 2026-10-22.\n[f1] Maya lives in Lisbon.\n[f3] Maya currently resides in Austin.", "output": { "rationale": "Supported by f2.", "answer": "Austin", "citations": [ "f2" ], "confidence": 0.9, "abstain": false } } } } }