ILabMemory
ILabMemory es el único entry point público de la librería. Todo método que vayas a llamar vive en esta clase. Internamente compone session lifecycle, search, upsert y storage — pero esos módulos no son parte de la API pública.
Contrato hexagonal: ILabMemory es el único consumidor del ABC Store. No importes SQLiteStore directo — usá from_path.
Constructor
ILabMemory(store: Store, config: Config | None = None)
Inyectá una implementación de Store propia. Usalo solo si necesitás un backend que no sea SQLite o querés controlar la creación del store explícitamente. Para el 99% de los casos, usá from_path.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
store | Store | sí | Port de persistencia hexagonal. Tiene que implementar el ABC Store de ilab_memory.core.store. El orchestrator es el único módulo que puede llamarlo. |
config | Config | None | no (default None) | Configuración de la librería. Por defecto es Config(db_path=":memory:") (sentinel — db_path se ignora cuando inyectás el store directo). |
from_path
ILabMemory.from_path(db_path: str | Path, config: Config | None = None) -> ILabMemory
Factory recomendada. Crea un ILabMemory respaldado por una base SQLite en db_path. Usá :memory: para tests y runs efímeros.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
db_path | str | Path | sí | Path en disco a la base SQLite (o ":memory:"). Se crea en el primer uso; idempotente. |
config | Config | None | no (default None) | Config opcional. Si lo pasás, su db_path queda overrideado por el db_path del argumento — así el config siempre matchea el path real del store. |
Returns
Una instancia ILabMemory lista para usar.
Context manager
ILabMemory implementa __enter__ / __exit__, así que podés usarlo dentro de un with para garantizar que el store cierre limpio.
from ilab_memory import ILabMemory
with ILabMemory.from_path("./memory.db") as mem:
mem.mem_session_start("alice")
# ... tu trabajo ...
# el store se cierra acá automáticamente
También podés llamar mem.close() explícito. El método es idempotente.
Ejemplos
- Quick start
- In-memory (tests)
- Con Config explícito
- Store custom (avanzado)
from ilab_memory import ILabMemory
mem = ILabMemory.from_path("./memory.db")
response = mem.mem_session_start(user_id="alice")
print(response.session_id, response.is_new)
mem = ILabMemory.from_path(":memory:")
# perfecto para unit tests — sin I/O en disco, estado fresco cada vez
from ilab_memory import ILabMemory
from ilab_memory.core.models import Config
cfg = Config(
db_path="./memory.db",
session_timeout_hours=12,
observation_types=("decision", "discovery", "pattern"),
)
mem = ILabMemory.from_path("./memory.db", config=cfg)
from ilab_memory import ILabMemory
from my_app.stores import RedisStore # backend custom hipotético
store = RedisStore(url="redis://localhost:6379")
mem = ILabMemory(store)
Thread safety
Single-threaded en v0.1. El SQLiteStore por defecto usa una sola conexión; el caller es dueño de la concurrencia. Si necesitás multi-thread, envolvé las llamadas en tu propio lock o usá un Store custom que maneje aislamiento.