Saltar al contenido principal

mem_save

Firma

mem.mem_save(
user_id: str,
content: str,
*,
type: str, # uno de: profile, preference, decision, discovery, pattern
title: str,
topic_key: str | None = None,
) -> SaveResult

Guarda una observación para user_id. El privacy strip se aplica a ambos title y content antes del hashing y la persistencia (Braess #1) — todo lo que esté dentro de <private>...</private> queda como [REDACTED]. La sesión activa se toca en cada llamada, incluso en dedup.

Parámetros

ParámetroTipoRequeridoDescripción
user_idstrDueño de la observación. Tiene que matchear el user_id de la sesión activa.
contentstrContenido Markdown. Puede contener tags <private>...</private> — el contenido adentro se va a strippear a [REDACTED] ANTES del hashing/persistencia.
typestr (Literal)Uno de profile, preference, decision, discovery, pattern. El tipo summary está reservado — pasarlo levanta ValueError (usá mem_session_summary). Si Config.observation_types está seteado, solo se permiten esos valores.
titlestrCorto, searchable. Verbo + objeto (ej. "Fixed FTS5 syntax error", "Chose SQLite over Postgres").
topic_keystr | Noneno (default None)Key opcional estable (ej. "architecture/auth"). Mismo key + mismo user_id → upsert in place. Tópicos distintos DEBEN usar keys distintas (sino sobrescriben). Ver Conceptos: Topic keys.

Returns

SaveResult (modelo Pydantic frozen):

  • id (int) — id de la observación.
    • outcome (Literal["created", "updated", "deduped"]) — qué pasó.
    • session_id (str) — sesión a la que se atribuye este save.
    • topic_key (str | None) — devuelto si lo pasaste.

Levanta

  • ValueErrortype inválido (reservado o fuera de config.allowed_types), content / title / user_id vacío, etc.
  • RuntimeError — falla del storage.

Ejemplos

mem.mem_save(
user_id="alice",
content="Cambiamos de Postgres a SQLite por simplicidad en v0.1.",
type="decision",
title="Elección de DB para v0.1",
topic_key="architecture/db",
)

Ver también