Oroi
Oroi (euskera: raíz de oroitu, «recordar») — una red semántica para agentes conversacionales. Memoria para una conversación infinita.
Oroi es una memoria asociativa para chatbots y agentes LLM que almacena la conversación como una red semántica con dinámica de activación inspirada en la memoria humana: lo mencionado se activa, la activación se propaga a lo asociado, todo decae con los turnos, las asociaciones que se repiten se refuerzan y un proceso en segundo plano consolida lo importante — como la memoria humana consolida durante el sueño.
La hipótesis: la recuperación sensible a la activación supera a la recuperación por similitud vectorial pura (RAG) en conversaciones largas con referencias recurrentes y deriva temática. En una evaluación de 224 escenarios, Oroi supera al RAG híbrido 0,75 frente a 0,55 en recall de recuperación (gana en 43 escenarios y no pierde en ninguno; p<10⁻⁴), con la ventaja concentrada en los casos que confunden a la búsqueda por similitud: distractores, datos que cambian y cadenas de tres asociaciones.
Oroi is an associative memory for LLM agents: a semantic network with activation dynamics inspired by human memory. Spanish-first project; English preprint available below.
El preprint
- 📄 Oroi: una red semántica para agentes conversacionales (castellano)
- 📄 Oroi: a semantic network for conversational agents (English)
- 🔗 DOI: 10.5281/zenodo.21208930
Instalación
Requiere Python ≥ 3.12 con soporte de extensiones SQLite (los intérpretes de uv, Homebrew, conda y las distribuciones Linux lo traen; el instalador de python.org para macOS, no).
# como librería, dentro de tu proyecto (venv, uv, poetry...):
pip install oroi
# como herramienta de línea de comandos, global:
uvx oroi # o: pipx install oroi
# desde el repositorio, para desarrollo:
git clone https://github.com/igorlaburu/oroi && cd oroi && uv sync
Credenciales: copia .env.example a .env (en tu carpeta de trabajo o en ~/.oroi/.env para
tenerlas globales) y rellena tus claves — Azure OpenAI, o cualquier endpoint OpenAI-compatible
como Ollama para correr 100 % en local. Tu memoria vive por defecto en ~/.oroi/mind.db
(cámbiala con --db en cualquier comando).
Uso en diez líneas
from oroi import Mind
from oroi.extraction.extractor import TurnExtractor
from oroi.providers.azure import AzureEmbedder, AzureLLM
from oroi.providers.settings import ProviderSettings
settings = ProviderSettings() # lee .env
llm = AzureLLM(settings)
mind = Mind("memoria.db", AzureEmbedder(settings), TurnExtractor(llm), judge=llm)
mind.perceive("mi oficina está en Madrid") # codificar un turno
print(mind.recall("¿dónde trabajo?")) # recuperar: reconocimiento + evocación
La memoria persiste en memoria.db: reabrir es continuar, no empezar de cero. Mind.sleep()
consolida (fusión de duplicados, promoción de asociaciones repetidas, poda); en el REPL y el
servidor ocurre solo al quedar inactiva la conversación.
La línea de comandos
uv run oroi-chat # REPL conversacional con memoria (proveedor por .env)
uv run oroi viz --db memoria.db # la película de la memoria, en HTML autocontenido
uv run oroi serve --db memoria.db # visor en vivo + chat contra la mente real
uv run oroi replay --db memoria.db # reconstruye la película desde los episodios
uv run oroi consolidate --db memoria.db # consolidación bajo demanda
¿Sin conversación propia todavía? uv run python examples/demo_conversation.py graba una
conversación cotidiana de demostración en examples/demo.db.
Proveedores
| Pieza | Soporte hoy |
|---|---|
| Extracción (LLM rápido) | Azure OpenAI, u OpenAI-compatible (OpenAI directo, Ollama, vLLM...) |
| Embeddings | Azure OpenAI, u OpenAI-compatible con un modelo de embeddings en el endpoint |
| Conversador | Claude (API o sesión local de Claude Code), Azure, u OpenAI-compatible |
Para correr 100 % en local con Ollama: MEMORY_PROVIDER=openai,
OPENAI_BASE_URL=http://localhost:11434/v1, OPENAI_FAST_MODEL=qwen3.6:latest (o tu modelo), y
un modelo de embeddings servido (p. ej. nomic-embed-text, con OPENAI_EMBEDDING_DIM=768).
El núcleo no depende de ningún proveedor: oroi/providers/base.py define los Protocols
(Embedder, Extractor, Chat) y todo se inyecta por constructor — cualquier otro proveedor es
implementar dos o tres métodos.
Evaluación
El protocolo del preprint es reproducible: evaluation/ contiene el corpus sintético
(224 escenarios, 7 fenómenos), las condiciones de contraste (RAG híbrido, RAG sobre hechos,
re-ranker) y las dos métricas (Recall@contexto y Answer@judge).
uv run python -m evaluation.run # tabla por fenómeno + test de McNemar + costes
Estado y licencia
Código bajo Apache-2.0; el nombre «Oroi» queda fuera de la concesión de licencia. Proyecto de investigación en desarrollo activo: la API puede cambiar. Próximas piezas declaradas en el preprint: reelaboración de recuerdos y validación sobre benchmark externo.
Contacto
Igor Laburu · Gako AI · oroi@gako.ai
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oroi-0.1.1.tar.gz.
File metadata
- Download URL: oroi-0.1.1.tar.gz
- Upload date:
- Size: 490.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e4b6e972b89c5e61d327f89cbba6c77581eb763f5c470979ef2785ed772df35
|
|
| MD5 |
84a4abb46ed98398e6f77671862101c7
|
|
| BLAKE2b-256 |
69b1431c1b19e1e1d9be3d2c9dc63c65616080920a0df7a76d4cdc8d5558f8c9
|
File details
Details for the file oroi-0.1.1-py3-none-any.whl.
File metadata
- Download URL: oroi-0.1.1-py3-none-any.whl
- Upload date:
- Size: 59.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48948ba00f8b16c3f93950af46775ef8c95801ce218c1cfaa33762359ef3bf40
|
|
| MD5 |
81a5c3507d375541b5102ff74f24938c
|
|
| BLAKE2b-256 |
f465fb32234dc68b67c82b6b2bbfc2d947c8766d6caad57cbacff2abb3573a6b
|