---
name: memory_data
lang: py
domain: core
version: "1.0.0"
algebraic: product
definition: |
  @dataclass
  class MemoryData:
      memory_type: str
      uri: str | None = None
      fields: dict[str, Any] = field(default_factory=dict)
      abstract: str | None = None
      overview: str | None = None
      content: str | None = None
      name: str | None = None
      tags: list[str] = field(default_factory=list)
      created_at: datetime | None = None
      updated_at: datetime | None = None
description: "Instancia concreta de un dato de memoria de agente. Los campos son dinamicos (dict) validados contra MemoryTypeSchema. Soporta 3 niveles de contenido (L0 abstract, L1 overview, L2 content) para retrieval jerarquico eficiente."
tags: [memory, data, agent, dataclass, retrieval, hierarchical]
uses_types: [memory_type_schema_py_core]
file_path: "python/types/core/memory_data.py"
---

## Notas

El campo `fields` es un dict dinamico cuyas claves deben corresponder a los `name` de los `MemoryField` del `MemoryTypeSchema` asociado. La validacion contra el schema es responsabilidad del sistema que consume este tipo.

Los 3 niveles de contenido permiten retrieval jerarquico:
- `abstract` (L0): una linea, para mostrar en listas o contexto muy limitado.
- `overview` (L1): parrafo, para contexto medio sin cargar el contenido completo.
- `content` (L2): sin limite, el dato completo serializado.

`uri` identifica la instancia para operaciones de update. Si es `None`, se trata como nueva insercion.

Metodos auxiliares `get_field` y `set_field` proveen acceso tipado al dict `fields`.

## Ejemplo

```python
entry = MemoryData(
    memory_type="profile",
    uri="profile/lucasg",
    name="Lucas G",
    abstract="Desarrollador senior con foco en sistemas distribuidos",
    fields={
        "username": "lucasg",
        "role": "senior engineer",
        "interaction_count": 42,
    },
    tags=["active", "admin"],
)

entry.set_field("role", "tech lead")
role = entry.get_field("role")  # "tech lead"
```
