diff --git a/packages/everalgo-user-memory/src/everalgo/user_memory/prompts/en/profile.py b/packages/everalgo-user-memory/src/everalgo/user_memory/prompts/en/profile.py index 536a086..df912d1 100644 --- a/packages/everalgo-user-memory/src/everalgo/user_memory/prompts/en/profile.py +++ b/packages/everalgo-user-memory/src/everalgo/user_memory/prompts/en/profile.py @@ -43,6 +43,19 @@ 3. evidence should include time info - e.g., "In Oct 2024 user mentioned..." 4. Index numbers for explicit_info and implicit_traits are independent 5. **Deduplication**: Before using "add", carefully check ALL existing items. If a similar trait/info already exists (even with different wording), use "update" to enrich it instead of adding a duplicate. Only use "add" for genuinely NEW information not covered by any existing item. +6. **Durable abstraction — HARD RULE (anti-bloat)**: `description` is a TIMELESS generalization. It must NEVER contain a date, weekday, or clock time (coarse time, if truly needed, goes only in `evidence`, never in `description`). + IF the new conversation is another instance of a pattern already covered by an existing item (another meal, listening session, purchase, mood episode, etc.) THEN you MUST: + - use action="update" on that existing item (never action="add" for it), AND + - REWRITE its `description` into ONE timeless sentence that folds the new instance into the existing pattern — do NOT append the new instance as a separate dated clause. + Example: + WRONG (appended dated instance): "Prefers napping after lunch. On 2026-07-01 napped again after lunch and reported waking up refreshed." + RIGHT (re-synthesized): "Regularly naps after lunch, typically waking refreshed; treats it as a normal part of the daily routine." + If an existing `description` is already an enumerated/dated log, rewrite it into a generalization as part of this same update. + IF an existing `description` ALREADY mixes multiple sub-topics and/or already contains dates (like the example below), you MUST fully rewrite the ENTIRE description into clean, dateless, merged prose — do not just patch the new instance onto the end of an already-dated description. + Example of fixing an already-bloated item: + WRONG (existing item, already has 2 dates, and a 3rd is appended): "Tends to stay up late, improving lately. On 2026-06-29 stayed up late to confess something. Also naps some afternoons. On 2026-07-01 napped again, waking with no dreams." + RIGHT (existing item rewritten dateless, new info folded in): "Tends to stay up late but has been improving under gentle accountability, occasionally negotiating exceptions when something specific comes up; also naps some afternoons, usually reporting back after waking with no issues." + Before finalizing your response: re-read every `description` you are about to output and check it contains no date/weekday/clock-time token. If one slipped in, rewrite that description now — do not submit it with a date still present. 【Profile Definitions & Analysis Framework】 - **explicit_info (Explicit Information)**: User facts that can be directly extracted from conversations. @@ -125,7 +138,12 @@ 【Extraction Principles】 1. Only extract information about the user themselves, not assistant suggestions 2. Implicit traits must be supported by multiple evidence: each implicit trait must have evidence corroborated by multiple signals from the conversations and/or existing profile; do not infer from a single data point alone -3. Describe each piece of information in one natural sentence, easy to understand +3. **Durable abstraction — HARD RULE**: describe each item as ONE concise, timeless sentence — a stable generalization, NEVER a dated log or list of instances. `description` must NEVER contain a date, weekday, or clock time (put coarse timing only in `evidence`, never in `description`). + IF the conversation shows the same behavior/preference multiple times (meals, listening sessions, purchases, moods) THEN you MUST fold all instances into ONE generalized sentence — do NOT enumerate them as separate dated events. + Example: + WRONG: "Ate ramen on 06-05, pasta on 06-07, and ramen again on 06-10." + RIGHT: "Frequently eats noodle-based dishes; enjoys variety across visits." + Before finalizing: check every `description` for date/weekday/clock-time tokens; rewrite any that contain one. 【Output Format】 Output JSON directly in the following format: